Skip to main content
 首页 » 编程设计

python之是否可以将原始 SQL 与 python 的 django web 框架一起使用

2025年05月04日18davidwang456

我正在从 PHP 切换到 Django/Python,到目前为止我不太喜欢 Django 的一件事是 ORM。插入新行的时候还好,但是当我想选择更具体的东西时,我发现ORM比纯SQL更麻烦,特别是因为我已经很了解SQL了。

那么,我可以在 Django 中编写纯 SQL,还是必须使用 ORM?

如果可能的话,非常欢迎提供有关如何在 Django 中使用 SQL 的示例。

请您参考如下方法:

是的!你可以。

https://docs.djangoproject.com/en/1.7/topics/db/sql/

来自 Django 的精彩文档;

有两种方式;

  1. 使用管理器方法 raw()

    https://docs.djangoproject.com/en/1.7/topics/db/sql/#performing-raw-queries

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

    然后您可以像这样执行自定义 SQL:

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

    使用下面的方法传递参数。

    >>> lname = 'Doe' 
    >>> Person.objects.raw('SELECT * FROM myapp_person WHERE last_name = %s', [lname]) 
    
  2. 直接执行自定义 SQL。

    https://docs.djangoproject.com/en/1.7/topics/db/sql/#executing-custom-sql-directly

    from django.db import connection 
    def my_custom_sql(self): 
        cursor = connection.cursor() 
        cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz]) 
        cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz]) 
        row = cursor.fetchone() 
    return row