原始sql查询和普通sql查询之间有什么区别?

时间:2019-10-12 07:16:21

标签: python sql django

我是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 个答案:

答案 0 :(得分:3)

Django(与其他类似的ORM工具一样)是关系数据库与面向对象编程之间的连接。它实现的非常重要的功能之一就是为数据库提供统一的接口,而与底层数据库无关。

使用底层Django功能时,任何数据库都应支持该代码(对此可能有特定的限制)。这使得移植到另一个数据库特别容易。它还有助于确保所生成的查询符合您的预期。

使用原始SQL时,该代码可能特定于一个数据库(造成移植问题)。该代码也不会被检查,这可能导致难以理解的错误。

我强烈希望直接使用SQL,但这是因为我不是使用ORM框架的程序员。如果要使用这样的框架,则最好尽可能使用内置功能。<​​/ p>

答案 1 :(得分:2)

这是一个边界意见问题,因此可能会被标记出来,但这是一个好主意。本质上,原始SQL查询仅打算用于Django ORM无法满足您需求的极端情况(并且Django的每个新版本都支持越来越多的查询类型,因此raw的用处不大。)

通常,我建议使用ORM以获得更有用的错误消息,可维护性和易用性,并且仅将raw用作最后的解决方法