Hello List, the problem I am facing is that _deep_deannotate, which is used in ColumnProperty.__init__, breaks the FROM clause of my select() object if this select() has a JOIN (either left or right, doesn't matter) as from_obj in it, _where the initial table is aliased_.
To illustrate I'll append my testcase. I traced it down to Select._copy_internals(), line 4907 in sqlalchemy.sql.expression, where the call to s._from_obj.union(s._froms) will happily add an the initial table _a second time_ to the FROM clause, (it is already part of the join object) resulting in an error from the database because the alias is duplicated in the generated SQL. Taking any hints on how to fix this. :) Reproduced in 0.7.6 thanks, Christoph -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To view this discussion on the web visit https://groups.google.com/d/msg/sqlalchemy/-/w1P2N5cbeL4J. To post to this group, send email to sqlalchemy@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.
#!/usr/bin/env python # encoding: utf-8 # This is an illustration of a problem with column_properties where # the from_obj contains joined aliased tables. from sqlalchemy import Table, Column, Integer, ForeignKey, MetaData from sqlalchemy import select from sqlalchemy.sql.util import _deep_deannotate metadata = MetaData() orders = Table( 'orders', metadata, Column('order_id', Integer, primary_key=True), ) item = Table( 'item', metadata, Column('item_id', Integer, primary_key=True), Column('order_id', Integer, ForeignKey('orders.order_id')), ) a = item b = a.outerjoin(orders) s = select([a.c.item_id], from_obj=b) # OK. This is how the select should look like. print s print _deep_deannotate(s) print a = item.alias() b = a.outerjoin(orders) s = select([a.c.item_id], from_obj=b) print s # XXX Not OK. Look at the FROM clause of this select print _deep_deannotate(s)