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