python的django原生sql的實現

當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 Smith
Jane 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"])


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章