目录
- 随笔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的,
不知道有没有什么更优雅的方式,希望各位大佬不吝赐教。