如何使用SQLAlchemy找出是否还没有加载惰性关系?

Jor*_*ril 14 python sqlalchemy

使用SQLAlchemy,有没有办法事先知道关系是否会延迟加载?
例如,给定一个惰性parent-> children关系和一个实例X"parent",我想知道是否已经加载了"X.children",而没有触发查询.

kol*_*pto 15

您可以从中获取所有已卸载属性(关系和列)的列表sqlalchemy.orm.attributes.instance_state(obj).unloaded.

请参阅:使用关系完成对象并避免在sqlalchemy中进行不必要的查询

一种更简单的方法是使用inspect(),它给出了相同的结果:

from sqlalchemy import inspect
from sqlalchemy.orm import lazyload

user = session.query(User).options(lazyload(User.articles)).first()
ins = inspect(user)

ins.unloaded  # <- set or properties that are not yet loaded
Run Code Online (Sandbox Code Playgroud)


Hae*_*aes 5

我认为您可以查看孩子的__dict__属性字典以检查数据是否已经存在。