我正在从PHP切换到Django / Python,到目前为止我还不喜欢django的一件事是ORM。插入新行时,没关系,但是当我想选择更具体的东西时,我发现ORM比纯SQL更麻烦,特别是因为我已经很熟悉SQL了。
那么,我可以在Django中编写纯SQL,还是我被迫使用ORM?
如果可能的话,非常欢迎有关如何在django中使用SQL的示例。
答案 0 :(得分:6)
是的!你可以。
https://docs.djangoproject.com/en/1.7/topics/db/sql/
来自Django的精彩文档;
有两种方式;
使用经理方法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])
直接执行自定义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
答案 1 :(得分:3)
class Foo(models.Model):
bar = models.CharField('bar', max_length=32)
你可以写
Foo.objects.raw("SELECT bar from appname__foo LIMIT 5;")
或任何你喜欢的SQL。关键是使用models.Model.objects.raw
方法。
由您来确保查询返回Foo对象