Sqlalchemy用于在Django项目中执行复杂查询

时间:2011-06-20 14:28:56

标签: django sqlalchemy

使用sqlalchemy在Django项目中执行复杂查询的最佳选择是什么?我发现很安静,但它看起来不像是一个有很多用户的项目...有什么建议吗?

原因:我在整个项目中有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喜欢在事务中包装每个选择,但我仍然不知道如何禁用它),但它看起来更好。

1 个答案:

答案 0 :(得分:1)

虽然我不熟悉安静,但我可以说在django中使用sqlalchemy的方法是......在django中使用sqlalchemy ...

当我过去在django项目中使用sqlalchemy时,我通常会从外部数据源读取数据(不是由django ORM管理的)。考虑到这一点,我倾向于使用SqlSoup extension,它不要求您明确声明数据的结构。这也许对你有好处,因为我猜你不想在2个不同的ORM中写两次你的模型。

另一个提示:如果您不需要sqlalchemy用于每个视图,请不要在设置模块中打开连接。将sqlalchemy代码(包括连接创建)放在自己的模块或包中 - 尽可能保持隔离。只需导入模块并在您真正需要时创建连接。

所有这一切都取决于你的目标。您的查询主要是阅读,还是您想要写?我真的不知道你想要做什么。