我是 sql 和数据库的新手,目前正在 django 框架中开发网站。在阅读 django 文档期间,我阅读了有关使用 Manager.raw() 执行的原始 sql 查询,如下所示。for p in Person.objects.raw('SELECT * FROM myapp_person'):
Manager.raw(raw_query, params=None, translations=None)原始查询与普通 sql 查询有何不同以及何时应该使用原始 sql 查询而不是 Django ORM?
2 回答
慕工程0101907
TA贡献1887条经验 获得超5个赞
Django(与其他类似的 ORM 工具一样)是关系数据库和面向对象编程之间的连接。它实现的一个非常重要的功能是为数据库提供一个统一的接口——无论底层数据库如何。
当您使用底层 Django 功能时,任何数据库都应支持该代码(对此可能有特定限制)。这使得移植到另一个数据库变得特别容易。它还有助于确保生成的查询符合您的预期。
当您使用原始 SQL 时,代码可能特定于一个数据库(产生移植问题)。代码也未检查,这可能导致难以理解的错误。
我非常喜欢直接使用 SQL——但那是因为我不是使用 ORM 框架的程序员。如果您要使用这样的框架,最好尽可能使用内置功能。
拉莫斯之舞
TA贡献1820条经验 获得超10个赞
这是一个边缘意见问题,因此可能会被标记,但这是一个很好的观点。本质上,原始 SQL 查询仅用于 Django ORM 无法满足您的需求的边缘情况(并且随着每个新版本的 Django,它支持越来越多的查询类型,因此原始 SQL 变得不那么有用)。
一般来说,我建议使用 ORM 以获得更有用的错误消息、可维护性和简单易用性,并且仅将 raw 用作最后的手段
添加回答
举报
0/150
提交
取消