Hi Michael, On 12-06-2009 16:22, Michael Bayer wrote: > this is likely a bug. try out the patch below (against the latest 0.5 > release): >
After applying the patch it works perfectly. Thanks a lot! Regards, Roel > Index: lib/sqlalchemy/orm/state.py > =================================================================== > --- lib/sqlalchemy/orm/state.py (revision 6049) > +++ lib/sqlalchemy/orm/state.py (working copy) > @@ -111,8 +111,8 @@ > return None > elif hasattr(impl, 'get_collection'): > return impl.get_collection(self, dict_, x, passive=passive) > - elif isinstance(x, list): > - return x > +# elif isinstance(x, list): > +# return x > else: > return [x] > > > > > Roel van Os wrote: > >> Hi all, >> >> In my program I'm using PGArray to store a list of strings in the >> database (defined as text[] in the schema). >> >> When I use Session.merge to create a copy of an object in the current >> session, the list is converted to a single string (the first from the >> list) in the copy. I've placed an example below. dont_load True or False >> doesn't make a difference. >> >> I've tested with SQLAlchemy 0.5.4 and 0.4.6. >> >> Any idea what the problem might be and what I can do about it? >> >> Thanks, >> Roel van Os >> >> Example code: >> >> #!/usr/bin/env python >> from sqlalchemy import * >> from sqlalchemy.sql import * >> from sqlalchemy.orm import * >> from sqlalchemy.ext.declarative import declarative_base >> from sqlalchemy.databases.postgres import PGArray >> >> Base = declarative_base() >> >> class TestClass(Base): >> __tablename__ = 'testclass' >> >> id = Column(Integer, primary_key=True) >> test_array = Column(PGArray(Text)) >> >> dburl = 'postgres://xxxx:x...@xxxx/xxxx' >> engine = create_engine(dburl, convert_unicode=True, echo=False, >> pool_recycle=60) >> Session = sessionmaker(bind=engine) >> Base.metadata.create_all(engine) >> >> # Create a test object >> s1 = Session() >> o1 = TestClass(test_array=['1', '2', '3']) >> s1.save(o1) >> s1.commit() >> o1_id = o1.id >> s1.close() >> >> # Load the test object >> s2 = Session() >> o2 = s2.query(TestClass).get(o1_id) >> print o2.test_array >> assert len(o2.test_array) == 3 >> >> # Merge the object into another session >> s3 = Session() >> o3 = s3.merge(o2, dont_load=True) >> >> # Should print the same as above, but prints "1" >> print o3.test_array >> assert len(o3.test_array) == 3 >> >> >> > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---
