raw
# row方法:(摻雜著原生sql和orm來執行的操作)
res = cookbook.objects.raw('select id as nid from epos_cookbook where id>%s', params=[1, ])
print(res.columns) # ['nid']
print(type(res)) # # 在select裡面查詢到的資料orm裡面的要一一對應
res = cookbook.objects.raw("select * from epos_cookbook")
print(res)
for i in res:
print(i.create_date)
print(i)
res = cookbook.objects.raw('select * from epos_cookbook where id>%s', params=[1, ])
# 後面可以加引數進來
print(res)
for i in res:
# print(i.create_date)
print(i)
extra
## select提供簡單資料
person.objects.all().extra(select=) # 加在select後面
## where提供查詢條件
person.objects.all().extra(where=["first||last ilike 'jeffrey%'"]) # 加乙個where條件
## table連線其它表
## params添引數
# !! 錯誤的方式 !!
first_name = 'joe' # 如果first_name中有sql特定字元就會出現漏洞
person.objects.all().extra(where=["first = '%s'" % first_name])
# 正確方式
person.objects.all().extra(where=["first = '%s'"], params=[first_name])
connection(類似pymysql)
from django.db import connection
cursor=connection.cursor()
# 如果需要配置資料庫
# cursor=connection['default'].cursor()
ret=cursor.fetchall()
print(ret)
#((2, '小時光', decimal('10.00'), 2), (3, '未來可期', decimal('33.00'), 1), (4, '打破思維裡的牆', decimal('11.00'), 2), (5, '時光不散', decimal('11.00'), 3))
注意:如果在sql語句中有用到除法(%),需要使用%%來轉義,因為在str中%多用於格式化輸出。 在django中使用原生sql語句
row方法 摻雜著原生sql和orm來執行的操作 res cookbook.objects.raw select id as nid from epos cookbook where id s params 1,print res.columns nid print type res 在select...
Django中使用原生Sql
在django中使用原生sql主要有以下幾種方式 一 extra 結果集修改器,一種提供額外查詢引數的機制 二 raw 執行原始sql並返回模型例項 三 直接執行自定義sql 這種方式完全不依賴model,前兩種還是要依賴於model 例項 使用extra 1 book.objects.filter...
Django中使用原生SQL
使用extra 結果集修改器,一種提供額外查詢引數的機制 models.book.objects.filter publisher name 人民出版社 extra where price 50 models.book.objects.filter publisher name 人民出版社 pric...