There is a bug related to this which is fixed in the most recent trunk. Please try that out and see if that resolves the issue.
On Nov 6, 2008, at 10:51 AM, mraer wrote: > > I have such queries: > > OI = aliased(OrderedItem, name="OrderedItem_AD") > CH = aliased(TChart, name="Chart_AD") > ORD = aliased(Order, name="Order_AD") > > alreadyDone = session.query(CH.id).\ > join((OI, CH.orderedItems)).\ > join((ORD, OI.order)).\ > join((User, ORD.user)).\ > join((OrderStatus, ORD.status)).\ > filter(User.name ==u"TestUser").\ > filter(OrderStatus.id == 1).\ > subquery() > > OI2 = aliased(OrderedItem, name="OrderedItem_CUR") > CH2 = aliased(TChart, name="Chart_CUR") > ORD2 = aliased(Order, name="Order_CUR") > > orderedItemsToExclude = session.query(OI2).select_from(join(OI2, > CH2)). > \ > join((ORD2, OI2.order)).\ > join((alreadyDone, alreadyDone.c.id == CH2.id)).\ > filter(ORD2.id == order.id) > > Alchemy generate such queries: > > alreadyDone: > SELECT "Chart_1".id > FROM "Chart" AS "Chart_1" JOIN "OrderedItem" AS "OrderedItem_1" ON > "Chart_1".id = "OrderedItem_1".chart_id JOIN "Order" AS "Order_1" ON > "Order_1".id = "OrderedItem_1"."Order_id" JOIN "User" ON "User".id = > "Order_1".user_id JOIN "OrderStatus" ON "OrderStatus".id = > "Order".status_id > WHERE "User".name = :name_1 AND "OrderStatus".id = :id_1 > > orderedItemsToExclude: > SELECT "OrderedItem_1"."downloadURL" AS "OrderedItem_1_downloadURL", > "OrderedItem_1".chart_id AS "OrderedItem_1_chart_id", > "OrderedItem_1"."Order_id" AS "OrderedItem_1_Order_id" > FROM "OrderedItem" AS "OrderedItem_1" JOIN "Chart" AS "Chart_1" ON > "Chart_1".id = "OrderedItem_1".chart_id JOIN "Order" AS "Order_1" ON > "Order_1".id = "OrderedItem"."Order_id" JOIN (SELECT "Chart_2".id AS > id > FROM "Chart" AS "Chart_2" JOIN "OrderedItem" AS "OrderedItem_2" ON > "Chart_2".id = "OrderedItem_2".chart_id JOIN "Order" AS "Order_2" ON > "Order_2".id = "OrderedItem_2"."Order_id" JOIN "User" ON "User".id = > "Order_2".user_id JOIN "OrderStatus" ON "OrderStatus".id = > "Order".status_id > WHERE "User".name = :name_1 AND "OrderStatus".id = :id_1) AS anon_1 ON > anon_1.id = "Chart_1".id > WHERE "Order_1".id = :id_2 > > The problem is that it doesn't use aliased name in join condition: > "Order_1".id = "OrderedItem"."Order_id" > must be > "Order_1".id = "OrderedItem_1"."Order_id" > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
