Flask SQLAlchemy操作数据库时,不管是直接用sql语句还是用orm,有的时候为了调试,都需要知道参数化查询的sql语句生成的实际sql语句是什么。
比如:
python
params = {'org': '123'}
# 如下是参数化查询sql语句,如果sql语句很长,
# 想知道实际的sql语句,即:
# "select name from table1 where org='123'"
# 怎么办?
sql = "select name from table1 where org=:org"
db.session.execute(sql, params).fetchall()
经过层层调试,发现实际语句在 pymysql/cursors.py
中的 Cursor.mogrify 方法中生成(其他mysql驱动如mysqlclient,情况也类似),在 return query
打个断点,调式时就能看到实际的sql语句了:
Cursor.mogrify 方法所在文件(pymysql包下的cursors.py文件):
完。