天天看点

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的,

不知道有没有什么更优雅的方式,希望各位大佬不吝赐教。