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