I want to map a table with a postgresql array as a primary key.
PostgreSQL supports it, and everything works until the session wants
to use the list returned from the query as an instance key.   How can
I intercept the row returned to wrap it in a tuple?  I can't figure
out translate_row!

"""
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column, Integer, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.dialects.postgresql.base import ARRAY

engine = create_engine('postgresql:///avdd')
DB = sessionmaker(bind=engine)

class A(declarative_base()):
    __tablename__ = 'a'
    ids = Column(ARRAY(Integer()), primary_key=True)

A.__table__.delete(bind=engine).execute()

a = A()
a.ids = (1,2,3)

db = DB()
db.add(a)
db.commit()

del a, db

db = DB()
print db.query(A).all()
"""

Traceback (most recent call last):
  File "testarraypk.py", line 25, in <module>
    print db.query(A).all()
  File "lib/sqlalchemy/orm/query.py", line 1217, in all
    return list(self)
  File "lib/sqlalchemy/orm/query.py", line 1376, in instances
    rows = [process[0](row, None) for row in fetch]
  File "lib/sqlalchemy/orm/mapper.py", line 1681, in _instance
    instance = session_identity_map.get(identitykey)
  File "lib/sqlalchemy/orm/identity.py", line 145, in get
    state = dict.get(self, key, default)
TypeError: unhashable type: 'list'
-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@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