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
-~----------~----~----~----~------~----~------~--~---

Reply via email to