this is committed in the latest trunk and will be in 0.5.5.
Michael Bayer wrote: > > Ok we'll have to ensure this doesn't break anything, that line doesn't > seem to be covered in the current unit tests > > Roel van Os wrote: >> 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 sqlalchemy@googlegroups.com To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---