Hi all,
the following mapped select results in the wrong query. The problem
seems to be related to the number of values in a list passed to in_
and maybe to "holes" in the list of chosen values.


from sqlalchemy import *
from sqlalchemy.orm import *

metadata = MetaData("...")
metadata.bind.echo=True

table = Table("test", metadata,
              Column("id", Integer, primary_key=True),
              Column("data", String))

table.create()

table.insert().execute([{"data": 1}, {"data": 2}, {"data": 3},
                        {"data": 4}, {"data": 5}, {"data": 6},
                        {"data": 7}, {"data": 8}, {"data": 9},
                        {"data": 10}, {"data": 11}, {"data": 12},
                        {"data": 13}, {"data": 14}, {"data": 15},
                        {"data": 30}, {"data": 44}, {"data": 55}])

test = table.select(table.c.id.in_([2, 3, 4, 5, 8, 10, 11, 13, 30, 44,
45])).alias("testView")

class Test(object):
    pass

mapper(Test, test)

referer = Table("referer", metadata,
                Column("id", Integer, primary_key=True),
                Column("fk", Integer, ForeignKey("test.id")))

referer.create()

referer.insert().execute([{"fk": 2}])

class Referer(object):
    pass

mapper(Referer, referer, properties={"ref": relation(Test)})

session = create_session()

t = session.query(Test).get(2)
print t
r = session.query(Referer).get(1)
print r.fk, r.ref


It prints

None
2 None

and the SQL statement for the first get should have param_1=1 instead
of None.

2007-11-06 16:26:30,394 INFO sqlalchemy.engine.base.Engine.0x..34
SELECT "testView".id AS "testView_id", "testView".data AS
"testView_data"
FROM (SELECT test.id AS id, test.data AS data
FROM test
WHERE test.id IN (%(test_id)s, %(test_id_1)s, %(test_id_2)s, %
(test_id_3)s, %(test_id_4)s, %(test_id_5)s, %(test_id_6)s, %
(test_id_7)s, %(test_id_8)s, %(test_id_9)s, %(test_id_10)s)) AS
"testView"
WHERE "testView".id = %(param_1)s ORDER BY "testView".id
2007-11-06 16:26:30,394 INFO sqlalchemy.engine.base.Engine.0x..34
{'test_id_3': 5, 'test_id_10': 45, 'param_1': None, 'test_id_8': 30,
'test_id_9': 44, 'test_id_1': 3, 'test_id_2': 4, 'test_id': 2,
'test_id_4': 8, 'test_id_5': 10, 'test_id_6': 11, 'test_id_7': 13}


Best regards
  Klaus


--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to