我经常需要在django中执行自定义sql查询,并且每次手动将查询结果转换为对象都有点痛苦。我想知道Slackers是如何解决这个问题的。也许有人写过某种类型的库来帮助处理Django中的自定义SQL?
答案 0 :(得分:4)
不完全确定您要查找的内容,但您始终可以在模型上添加方法以按the docs执行自定义SQL:
def my_custom_sql(self):
from django.db import connection
cursor = connection.cursor()
cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
row = cursor.fetchone()
return row
对于更通用的东西,创建一个abstract base model来定义一个带有“sql”参数的函数。
答案 1 :(得分:4)
最新的开发版本(未来1.2)有.raw()方法来帮助你:
Person.objects.raw('SELECT * FROM myapp_person')
可以在http://docs.djangoproject.com/en/dev/topics/db/sql/下找到更多信息。
答案 2 :(得分:3)
由于问题是“手动将查询结果转换为对象”,最简单的解决方案通常是查看自定义SQL是否适合ORM .extra()调用,而不是纯SQL查询。通常它可以,然后你让ORM像往常一样完成构建对象的所有工作。