使用Django ORM轻松执行原始SQL的工具

时间:2009-03-06 16:11:46

标签: python django orm

我经常需要在django中执行自定义sql查询,并且每次手动将查询结果转换为对象都有点痛苦。我想知道Slackers是如何解决这个问题的。也许有人写过某种类型的库来帮助处理Django中的自定义SQL?

3 个答案:

答案 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像往常一样完成构建对象的所有工作。