我用SQLAlchemy tutorial做了同样的用例。
>>> from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
>>> metadata = MetaData()
>>> users = Table('users', metadata,
... Column('id', Integer, primary_key=True),
... Column('name', String),
... Column('fullname', String),
... )
>>> addresses = Table('addresses', metadata,
... Column('id', Integer, primary_key=True),
... Column('user_id', None, ForeignKey('users.id')),
... Column('email_address', String, nullable=False)
... )
所有数据
In [36]: s = select([users.c.id, users, addresses.c.id, addresses]).select_from(users.outerjoin(addresses))
In [37]: conn.execute(s).fetchall()
2017-01-20 19:13:11,218 INFO sqlalchemy.engine.base.Engine SELECT users.id, users.name, users.fullname, addresses.id, addresses.user_id, addresses.email_address
FROM users LEFT OUTER JOIN addresses ON users.id = addresses.user_id
2017-01-20 19:13:11,218 - sqlalchemy.engine.base.Engine - INFO - SELECT users.id, users.name, users.fullname, addresses.id, addresses.user_id, addresses.email_address
FROM users LEFT OUTER JOIN addresses ON users.id = addresses.user_id
2017-01-20 19:13:11,219 INFO sqlalchemy.engine.base.Engine {}
2017-01-20 19:13:11,219 - sqlalchemy.engine.base.Engine - INFO - {}
Out[37]:
[(1, 'jack', 'Jack Jones', 1, 1, 'jack@yahoo.com'),
(1, 'jack', 'Jack Jones', 2, 1, 'jack@msn.com'),
(2, 'wendy', 'Wendy Williams', 3, 2, 'www@www.org'),
(2, 'wendy', 'Wendy Williams', 4, 2, 'wendy@aol.com')]
使用wherestatement
In [42]: s = select([users.c.id, users, addresses.c.id, addresses]).where(users.c.id == 1).select_from(users.outerjoin(addresses, addresses.c.user_id == users.c.id))
In [43]: conn.execute(s).fetchall()
2017-01-20 19:23:41,153 INFO sqlalchemy.engine.base.Engine SELECT users.id, users.name, users.fullname, addresses.id, addresses.user_id, addresses.email_address
FROM users LEFT OUTER JOIN addresses ON addresses.user_id = users.id
WHERE users.id = %(id_1)s
2017-01-20 19:23:41,153 - sqlalchemy.engine.base.Engine - INFO - SELECT users.id, users.name, users.fullname, addresses.id, addresses.user_id, addresses.email_address
FROM users LEFT OUTER JOIN addresses ON addresses.user_id = users.id
WHERE users.id = %(id_1)s
2017-01-20 19:23:41,155 INFO sqlalchemy.engine.base.Engine {'id_1': 1}
2017-01-20 19:23:41,155 - sqlalchemy.engine.base.Engine - INFO - {'id_1': 1}
Out[43]:
[(1, 'jack', 'Jack Jones', 1, 1, 'jack@yahoo.com'),
(1, 'jack', 'Jack Jones', 2, 1, 'jack@msn.com')]
不需要标签