python的django原生sql的实现

来源:互联网 发布:侠客风云传mod数据 编辑:程序博客网 时间:2024/06/18 12:38

当model满足不了需求的时候(比如:存储过程、多表连接等),可以使用原生sql。django提供了两种方法使用原生的sql:你可以使用Manager.raw()执行原生sql,它会返回model实例,或者也可以直接执行原生sql,完全忽略model。警告:使用原生sql的时候,要尽可能的使用参数的形式以防止用户进行sql注入攻击。


Manager.raw()执行原生sql

使用raw()方法执行原生sql,返回model实例:Manager.raw(raw_query, params=None, translations=None)。

举个列子:

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 SmithJane Jones


具体看官方文档:https://docs.djangoproject.com/en/1.10/topics/db/sql/#executing-raw-queries


直接执行原生sql

使用django.db.connections模块进行执行原生sql,忽略model。

之前封装了该模块,地址为:http://blog.csdn.net/kelindame/article/details/52443972

使用方法:

sql = "select id,name,price from test where id > %s and id <%s   "params = [1,2]row = fetchall(sql, params)print(row)#row的结果是select出来的东西,比如上面的id,name,price。for obj in row:print(obj["id"])print(obj["name"])print(obj["price"])


0 0
原创粉丝点击