Only a couple of months late, but here is the final working recipe:

class A(Base):
    __tablename__ = 'tbl_a'
    id = Column(Integer, primary_key=True)
    data = Column(String)

class B(Base):
    __tablename__ = 'tbl_b'
    id = Column(Integer, primary_key=True)
    data = Column(String)

meta.create_all()
session.add(A(data='a1'))
session.add(B(data='b1'))
session.commit()

q1 = session.query(A.data.label('somedata'),
literal_column("'A'").label('source'))
q2 = session.query(B.data.label('somedata'),
literal_column("'B'").label('source'))
subq = session.query().from_statement(union_all(q1,q2)).subquery()
query = session.query(subq)

for row in query:
    print row.source, row.somedata


generated SQL is:
SELECT anon_1.somedata AS anon_1_somedata, anon_1.source AS anon_1_source
FROM (SELECT tbl_a.data AS somedata, 'A' AS source
FROM tbl_a UNION ALL SELECT tbl_b.data AS somedata, 'B' AS source
FROM tbl_b) AS anon_1

Not sure if using the subquery will cause inefficient SQL, but that would
take some research looking at query plans and might vary by database engine.

--~--~---------~--~----~------------~-------~--~----~
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 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to