【发布时间】:2011-09-18 18:14:17
【问题描述】:
在 Django 项目中使用 sqlalchemy 执行复杂查询的最佳选择是什么?我找到了 quiet ,但它看起来不像一个有很多用户的项目......有什么建议吗?
原因:我在整个项目中有 30-40 个 RawQueries,维护这些查询很痛苦……我认为 SQLAlchemy 在这种情况下可以提供更好的体验。
更新。
要实现的主要目标是编写一些大型复杂查询,以后可以根据需要对其进行细化:
q = get_big_complex_sqlalachemy_query()
mine = q.filter_by(table.c.created_by_id=1)
closed = q.filter_by(table.c.is_closed=True)
Django 和 SQLAlchemy 最大的问题是事务管理。如果您使用大事务(每个请求一个事务),SQLAlchemy 在您提交它们之前不会看到任何更改(愉快的调试:)。所以我为 SQLAlchemy 编写了自定义连接池来使用 Django 连接。这也不太理想(现在测试中出现了问题,因为 SQLAlchemy 喜欢将每个选择包装在事务中,我仍然不知道如何禁用它),但它看起来更好。
【问题讨论】:
-
还有没有办法,Django ORM 能胜任?
-
@miku,例如:如何对一张表进行多个联接?像 LEFT JOIN 标签 t1 ... LEFT JOIN 标签 t2?我发现的唯一方法是编写 RawQuery,但正如我所说,看起来 sqlalchemy 可以为此提供更好的方法......至少通过 SQLAlchemy 生成 SQL 并将其传递给 RawQuery。
-
@Vladimir:使用 .extra(tables=['table1', 'table2']) 怎么样?
-
@VladimirMihailenco 你能用 django 把一个链接放到你的 SQLAlchemy 连接池吗?
标签: django sqlalchemy