如何查看psycopg2执行参数化查询时最终发送到数据库的SQL语句
方法1:使用mogrify()方法(最便捷,无需实际执行查询)
psycopg2内置的cursor.mogrify()方法会按照和实际执行完全一致的规则拼接参数和SQL模板,返回最终会发送到数据库的查询语句字节串,是调试单条查询的首选方案。
示例代码:
SQL = "INSERT INTO authors (name) VALUES (%s);" data = ("O'Reilly", ) # 直接获取拼接后的语句 final_sql = cur.mogrify(SQL, data) print(final_sql.decode("utf-8")) # 输出结果:INSERT INTO authors (name) VALUES ('O''Reilly');
方法2:执行后访问cursor.query属性
psycopg2 2.7及以上版本支持在调用execute()执行查询后,通过cursor的query属性获取最后一次执行的完整语句:
cur.execute(SQL, data) print(cur.query.decode("utf-8"))
方法3:开启PostgreSQL日志记录(适合全局排查所有查询)
如果需要查看应用运行过程中所有发送到数据库的查询,可以修改PostgreSQL配置文件postgresql.conf的如下参数:
- 将
log_statement设置为'all' - 配置
log_directory和log_filename指定日志存储路径
修改后重启PostgreSQL服务,所有执行的SQL都会被写入日志文件,适合全链路调试场景。注意生产环境不要长期开启该配置,避免占用过多存储资源。
内容的提问来源于stack exchange,提问作者Lorem Ipsum
相关产品推荐
相关产品推荐

