更具体地说,我发现很多人倾向于使用过滤器来进行连接,而不是在 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 的使用方式更惯用?数据库资源使用或本地计算机资源使用方面是否存在差异(即,数据库的 CPU 和 RAM 压力更大,本地计算机压力较小,反之亦然)?
另外,前一种方式不允许update()
查询 API 上的方法 - 它抱怨不允许进行多表更新 - 即使我只更新一个表。后者允许update()
工作得很好。