在django中要直接使用sql操作数据库,官方提供了两种方式
1、使用 Manager.raw(raw_query, params=None, translations=None)
使用方法:
先看模型models.py
class Person(models.Model):
first_name = models.CharField(...)
last_name = models.CharField(...)
birth_date = models.DateField(...)
然后看views视图函数
#可以使用一个列表将所有的queryset对象装起来,方便使用序列化器进行分页、标准化返回等操作
objs = []
for p in Person.objects.raw('SELECT * FROM myapp_person'):
print(p)
objs.append(p)
#支持序列化操作
serializer = PersonSerializer(objs,many=True)
2、使用 Executing custom SQL directly
from django.db import connection
def my_custom_sql(self):
with connection.cursor() as cursor:
#执行sql语句
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()
#查出所有数据
#row = cursor.fetchall()
return row
官方解释:
with connection.cursor() as c:
c.execute(…)
相当于:
c = connection.cursor()
try:
c.execute(…)
finally:
c.close()