>
> Thanks for answer. I don't think so. pg_composite haven't updates 1-3 
> years.

I already use another table for store data, that's more comfortable and 
> cross-pratform


понедельник, 18 сентября 2017 г., 17:12:13 UTC+3 пользователь Mike Bayer 
написал:
>
> On Mon, Sep 18, 2017 at 2:30 AM, Tolstov Sergey <whist...@gmail.com 
> <javascript:>> wrote: 
> >> Hi, i have some issue. I tried to replace namedtuple to dict and list 
> >> items (with adding hast function to them). But SQLAlchemy types returns 
> list 
> >> ordereddict, when i change items, session didn't see changes. Do you 
> found 
> >> solution? 
>
> looks like you are using 
>
> http://sqlalchemy-utils.readthedocs.io/en/latest/data_types.html#module-sqlalchemy_utils.types.pg_composite
>  
> , I'm not sure if the sqlalchemy-utils maintainer checks this list you 
> might want to try a github issue with that project. 
>
> > 
> > def make_hash(o): 
> >   if isinstance(o,(set,tuple,list)): 
> >     for i in o: 
> >       i= tuple([make_hash(e) for e in o]) 
> >       return hash(i) 
> >   elif isinstance(o,dict): 
> >     pass 
> >     i=make_hash([make_hash(j)for j in o.items()]) 
> >     return hash(i) 
> > 
> >   elif isinstance(o,(str,int)): 
> >     return hash(o) 
> >   else: 
> >     try: 
> >       return hash(o) 
> >     except: 
> >       return make_hash(o.__dict__) 
> >     return hash(o) 
> > 
> > 
> > # sys.exit() 
> > 
> > class hashabledict(dict): 
> >   def __key(self): 
> >     return tuple((k,self[k]) for k in sorted(self)) 
> >   def __hash__(self): 
> >     print 'try to make_hash'+str(self)+' result = '+ 
> str(make_hash(self)) 
> >     return make_hash(self) 
> >   def __eq__(self, other): 
> >     return make_hash(self) == make_hash(other) 
> > 
> > class hashablelist(list): 
> >   def __hash__(self): 
> >     return make_hash(self) 
> >   def __eq__(self, other): 
> >     return make_hash(self) == make_hash(other) 
> > 
> > class MyCompositeType(CompositeType): 
> >   pass 
> >   def __init__(self, name, columns): 
> >     if psycopg2 is None: 
> >         raise ImproperlyConfigured("'psycopg2' package is required in 
> order 
> > to use CompositeType.") 
> >     sqlalchemy.types.SchemaType.__init__(self) 
> >     self.name = name 
> >     self.columns = columns 
> >     if name in registered_composites: 
> >         self.type_cls = registered_composites[name].type_cls 
> >     else: 
> >         temp=hashablelist() 
> >         for c in columns: 
> >           temp.append(c.name) 
> >           self.__dict__.update({c.name:None}) 
> >         self.type_cls=hashabledict({self.name:temp}) 
> >     registered_composites[name] = self 
> > 
> >     class Caster(psycopg2.extras.CompositeCaster): 
> >       def make(obj, values): 
> >         my_dict=hashabledict() 
> >         for index,data in enumerate(self.type_cls.items()[0][1]): 
> >           if isinstance(values[index], unicode): 
> >             i= values[index].encode("utf-8") 
> >             values[index]=i 
> >           my_dict.update({data:values[index]}) 
> >         j=hashabledict() 
> >         j.update({self.type_cls.items()[0][0]:my_dict}) 
> >         return j 
> > 
> >     self.caster = Caster 
> >     attach_composite_listeners() 
> > 
> >   def bind_processor(self, dialect): 
> >     print 'bind_processor' 
> >     def process(value): 
> >       if value is None: 
> >           return None 
> >       out='' 
> >       out=out+ ' '.join('{name}'.format(name=i) 
> >         for i in self.type_cls.items()[0][1]) 
> >       mylist=[] 
> >       for j in value.items(): 
> >         mylist.append(j[1]) 
> >       i=collections.namedtuple(self.name,out) 
> >       return i(*mylist) 
> >     return process 
> >   def result_processor(self, dialect, coltype): 
> >     print 'result_processor' 
> >     # print self.__dict__ 
> >     def process(value): 
> >       print 'my values is'+str(value) 
> >       return value 
> >       self.type_cls=value 
> >       
> i=self.__class__(name=value.items()[0][0],columns=value.items()[0][1]) 
> >       # i.set_values(value.items()[0][1],name=value.items()[0][0]) 
> >       return i 
> >     return process 
> > 
> >   def __hash__(self): 
> >     return make_hash(self) 
> >   def __eq__(self, other): 
> >     return make_hash(self) == make_hash(other) 
> >   def __ne__(self, other): 
> >     return make_hash(self) != make_hash(other) 
> > 
> > 
> > Composite_type = MyCompositeType( 
> >     'composite_type', 
> >     [ 
> >       sqlalchemy.Column('chislo', sqlalchemy.Integer), 
> >       sqlalchemy.Column('slovo', sqlalchemy.String) 
> >     ] 
> >   ) 
> > 
> > -- 
> > SQLAlchemy - 
> > The Python SQL Toolkit and Object Relational Mapper 
> > 
> > http://www.sqlalchemy.org/ 
> > 
> > To post example code, please provide an MCVE: Minimal, Complete, and 
> > Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
> > description. 
> > --- 
> > You received this message because you are subscribed to the Google 
> Groups 
> > "sqlalchemy" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an 
> > email to sqlalchemy+...@googlegroups.com <javascript:>. 
> > To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:>. 
> > Visit this group at https://groups.google.com/group/sqlalchemy. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to