【发布时间】:2019-05-01 02:12:00
【问题描述】:
更具体地说,我看到很多人没有在 SQLAlchemy 中使用自然的类似 SQL 的连接语法,而是倾向于使用过滤器来进行连接。在这里详细说明我将如何加入:
(session.Query(Book)
.join(Author, Publisher, Retailer)
.filter(
Author.name == "Crenshaw Adams",
Publisher.country == "United States",
Retailer.is_online == True))
连接列隐含在模型声明文件中定义的关系中。
但在其他任何地方(尤其是在 StackOverflow 上)我都看到人们这样做:
(session.Query(Book)
.filter(
Book.author_id == Author.id,
Author.publisher_id == Publisher.id,
Publisher.retailer_id == Retailer.id,
Author.name == "Crenshaw Adams",
Publisher.country == "United States",
Retailer.is_online == True
))
以下哪种方法是正确的方法?哪个更 Pythonic?或者,至少,应该使用 SQLAlchemy 的方式更惯用?并且在DB资源使用方面,还是本地机器资源使用方面有区别(即DB的CPU和RAM压力更大,本地机器压力更小,反之亦然)?
此外,前一种方式不允许查询 API 上的 update() 方法 - 它抱怨不允许多表更新 - 即使我只更新一个表。后者允许update() 正常工作。
【问题讨论】:
标签: python sql postgresql sqlalchemy