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