如何在Django QuerySet中编写原始SQL查询?

时间:2016-12-10 21:21:52

标签: python sql-server django postgresql

我想在Django中使用以下SQL查询,但在直接尝试使用原始SQL后我无法使用它。 SQL在PostgreSQL查询窗口上执行时直接工作但在Django上没有工作。

SQL是在数字22522之前找到立即的较低值。我想在QuerySet格式或原始SQL中使用它。在下面添加了SQL查询 -

SELECT id, name, zip 
FROM region 
WHERE zip >= (SELECT max(zip) FROM region WHERE zip < 22522) 
AND zip <= (SELECT min(zip) FROM region WHERE zip>22522) 
ORDER BY zip ASC LIMIT 1

以下是我尝试在原始查询格式中使用的代码。我在c.execute()打印结果数据中正确地看到了任何其他简单的SQL查询。

from django.db import connection

with connection.cursor() as c:
    c.execute("SELECT id, name, zip FROM region WHERE zip>=(SELECT max(zip) 
    FROM region WHERE zip<22522) AND zip<=(SELECT min(zip) FROM region 
    WHERE zip>22522) ORDER BY zip ASC LIMIT 1")

    for row in c.fetchall():
        print(row[1])

1 个答案:

答案 0 :(得分:0)

为了以QuerySet格式返回结果,您需要从Djano模型开始,例如:

class Person(models.Model):
    first_name = models.CharField(...)
    last_name = models.CharField(...)
    birth_date = models.DateField(...)

>>> for p in Person.objects.raw('SELECT * FROM myapp_person'):
        print(p)

有关更多详细信息,请访问Django文档:Django Documentation