天天看點

django學習随筆随筆1:django執行原生sql

目錄

  • 随筆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的,

不知道有沒有什麼更優雅的方式,希望各位大佬不吝賜教。