在SQLAlchemy中,
它们生成相同的 SQL 语句。
有没有人能展示更具体的代码示例?
contains_eager
和joinedload
的区别是什么?它们都可用于加载一对多或多对一相关的行。我阅读了关于contains_eager
的手册,以及有关joinedload
的手册。它们生成相同的 SQL 语句。
query = session.query(User).\
outerjoin(adalias, User.addresses).\
options(contains_eager(User.addresses, alias=adalias)).all()
...
SELECT
users.user_id AS users_user_id,
users.user_name AS users_user_name,
adalias.address_id AS adalias_address_id,
adalias.user_id AS adalias_user_id,
adalias.email_address AS adalias_email_address,
(...other columns...)
FROM users
LEFT OUTER JOIN email_addresses AS email_addresses_1
ON users.user_id = email_addresses_1.user_id
>>> jack = session.query(User).\
... options(joinedload(User.addresses)).\
... filter_by(name='jack').all()
SELECT
addresses_1.id AS addresses_1_id,
addresses_1.email_address AS addresses_1_email_address,
addresses_1.user_id AS addresses_1_user_id,
users.id AS users_id, users.name AS users_name,
users.fullname AS users_fullname,
users.password AS users_password
FROM users
LEFT OUTER JOIN addresses AS addresses_1
ON users.id = addresses_1.user_id
WHERE users.name = ?
['jack']
有没有人能展示更具体的代码示例?
.options(contains_eager(Child.toys))
修改为.options(joinedload(Child.toys))
,然后查看Child.toys
不再作为过滤子集填充。 - metatoaster