fra*_*tiz 5 python sqlalchemy django-models
使用 Django ORM 的此查询需要 0.03 秒:
entry = ModelA.objects.select_related(
'modelB',
'modelC',
).prefetch_related(
'modelB__modelD',
'modelE',
'modelE__modelF',
'modelE__modelF__modelG',
'modelE__modelF__modelG__modelH1',
'modelE__modelF__modelG__modelH2',
'modelE__modelF__modelG__modelH3',
'modelE__modelF__modelI',
'modelE__modelF__modelJ',
).get(id=1)
Run Code Online (Sandbox Code Playgroud)
我在 SQLAlchemy 中想出的等效方法需要 0.12 秒*:
entry = session.query(ModelA) \
.options(joinedload(ModelA.modelB).joinedload(ModelB.modelD)) \
.options(subqueryload(ModelA.modelE).subqueryload(ModelE.modelF)
.subqueryload(ModelF.modelG).subqueryload('*')) \
.options(subqueryload(ModelA.modelE).subqueryload(ModelE.modelF)
.subqueryload(ModelF.modelI)) \
.options(subqueryload(ModelA.modelE).subqueryload(ModelE.modelF)
.subqueryload(ModelF.modelJ)) \
.filter(ModelA.id = 1) \
.first()
Run Code Online (Sandbox Code Playgroud)
*我意识到在 Django 中我查询了我并不真正需要的 modelC。
subqueryload('*')同一个表所需的多个关系?modelH1modelH2modelH3ModelE实例进行迭代时,对 to 的引用会ModelA在 sqlAlchemy 中触发一个新查询,而在 Django ORM 中它会自动填充。我有什么遗漏的吗?| 归档时间: |
|
| 查看次数: |
1625 次 |
| 最近记录: |