Skip to main content
 首页 » 编程设计

python之使用 django.db 时如何将原始 SQL 与 ORM API 混合使用

2024年09月03日35think

当我们需要的查询是简单的 select 或 insert 子句时,ORM 工具非常有用。

但有时我们可能不得不回退到使用原始 SQL 查询,因为我们可能需要进行如此复杂的查询,以至于仅使用 ORM API 无法为我们提供高效且有效的解决方案。

您如何处理从原始查询和orm查询返回的对象之间的差异?

请您参考如下方法:

我个人努力设计我的模型,这样我就不必推迟编写原始 SQL 查询,或者回退到混合在 ContentTypes 中复杂关系的框架,所以我没有这方面的经验。

文档涵盖了 API 的主题 performing raw SQL queries .您可以在您的模型 (MyModel.objects.raw()) 上使用 Manager.raw(),对于您可以将列映射回实际模型字段的查询,或用户 cursor 查询数据库连接上的原始行。

如果您打算使用 Manager.raw(),您将使用 RawQuerySet 而不是通常的 QuerySet。对于所有相关的事情,当使用结果对象时,这两个模拟容器是相同的,但是 QuerySet 是一个功能更丰富的 monad。

我可以想象在 Django 中执行原始 SQL 查询比使用不支持 ORM 的框架更有值(value)——Django 可以管理您的数据库模式并为您提供数据库连接,您只需手动创建查询和位置查询参数。生成的行可以作为列表或字典访问,这两者都使其适合在模板中显示或执行额外的提升。