目錄
- 随筆1:django執行原生sql
-
- 單個參數
- 多個參數
-
- 參數為元組
- 參數為清單
- 參數為字典
随筆1:django執行原生sql
單個參數
from django.db import connection
# 擷取遊标
cursor = connection.cursor()
sql = 'select * from test'
# 執行sql
cursor.execute(sql, )
多個參數
參數為元組
from django.db import connection
# 擷取遊标
cursor = connection.cursor()
sql = 'select * from test where ds between %s and %s'
args = ('2021-07-09', '2021-08-09')
"""
執行sql
此時執行的sql為:
select * from test where ds between '2021-07-09' and '2021-08-09'
"""
cursor.execute(sql, args)
參數為清單
from django.db import connection
# 擷取遊标
cursor = connection.cursor()
sql = 'select * from test where ds between %s and %s'
args = ['2021-07-09', '2021-08-09']
"""
執行sql
此時執行的sql為:
select * from test where ds between '2021-07-09' and '2021-08-09'
"""
cursor.execute(sql, args)
參數為字典
from django.db import connection
# 擷取遊标
cursor = connection.cursor()
sql = 'select * from test where ds between %(start_dt)s and %(end_dt)s'
args = {'start_dt': '2021-07-09', 'end_dt': '2021-08-09'}
"""
執行sql
此時執行的sql為:
select * from test where ds between '2021-07-09' and '2021-08-09'
"""
cursor.execute(sql, args)
那麼如何知道執行的sql是怎麼樣的呢?我在網上找了一圈,沒有找到滿意的答案,最後檢視了pymysql.cursor的源碼,發現cursor有個屬性叫 _executed,應該就是儲存已運作查詢的sql的,
不知道有沒有什麼更優雅的方式,希望各位大佬不吝賜教。