Skip to content

Instantly share code, notes, and snippets.

@tokibito
Last active August 29, 2015 13:56
Show Gist options
  • Save tokibito/9131587 to your computer and use it in GitHub Desktop.
Save tokibito/9131587 to your computer and use it in GitHub Desktop.
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy.orm import sessionmaker
Session = sessionmaker()
session = Session()
metadata = MetaData()
table1 = Table('table1', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
)
table2 = Table('table2', metadata,
Column('id', Integer, primary_key=True),
Column('table1_id', None, ForeignKey('table1.id')),
)
table3 = Table('table3', metadata,
Column('id', Integer, primary_key=True),
Column('table2_id', None, ForeignKey('table2.id')),
)
from sqlalchemy.sql import select
print select(
[table1, table2, table3]
).select_from(
table1.join(
table2.join(table3)
)
)
print "----"
t = session.query(table1).limit(100).subquery('T1')
print select(
[t, table2, table3]
).select_from(
t.join(
table2.join(table3)
)
)
"""
$ python a.py
SELECT table1.id, table1.name, table2.id, table2.table1_id, table3.id, table3.table2_id
FROM table1 JOIN (table2 JOIN table3 ON table2.id = table3.table2_id) ON table1.id = table2.table1_id
----
SELECT "T1".id, "T1".name, table2.id, table2.table1_id, table3.id, table3.table2_id
FROM (SELECT table1.id AS id, table1.name AS name
FROM table1
LIMIT :param_1) AS "T1" JOIN (table2 JOIN table3 ON table2.id = table3.table2_id) ON "T1".id = table2.table1_id
"""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment