Python 如何获取发送到数据库的准备好的查询

Python 如何获取发送到数据库的准备好的查询,python,pyodbc,python-db-api,Python,Pyodbc,Python Db Api,当使用这样的数据库库时,实现在应用参数替换后如何获得完全准备好的查询。我正在调用一个Sybase存储过程,它将通过参数替换接收18个参数。我想捕获实际发出的调用,并将其记录下来,以帮助调试。我需要的一个简单示例: pyodbc示例 import pyodbc conn = pyodbc.connect('DSN=test;PWD=password') c = conn.cursor() c.execute('CREATE TABLE stocks (symbol varchar(10), pri

当使用这样的数据库库时,实现在应用参数替换后如何获得完全准备好的查询。我正在调用一个Sybase存储过程,它将通过参数替换接收18个参数。我想捕获实际发出的调用,并将其记录下来,以帮助调试。我需要的一个简单示例:

pyodbc示例

import pyodbc
conn = pyodbc.connect('DSN=test;PWD=password')
c = conn.cursor()
c.execute('CREATE TABLE stocks (symbol varchar(10), price real)')
c.execute("INSERT INTO stocks VALUES (?, ?)", ('RHAT', 35.14))
c.execute('SELECT * FROM stocks WHERE symbol=?', ('RHAT',))
print c.fetchone()
import sqlite3
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute('CREATE TABLE stocks (symbol text, price real)')
c.execute("INSERT INTO stocks VALUES (?, ?)", ('RHAT', 35.14))
c.execute('SELECT * FROM stocks WHERE symbol=?', ('RHAT',))
print c.fetchone()
预期的最终查询(要记录)

sqlite3示例

import pyodbc
conn = pyodbc.connect('DSN=test;PWD=password')
c = conn.cursor()
c.execute('CREATE TABLE stocks (symbol varchar(10), price real)')
c.execute("INSERT INTO stocks VALUES (?, ?)", ('RHAT', 35.14))
c.execute('SELECT * FROM stocks WHERE symbol=?', ('RHAT',))
print c.fetchone()
import sqlite3
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute('CREATE TABLE stocks (symbol text, price real)')
c.execute("INSERT INTO stocks VALUES (?, ?)", ('RHAT', 35.14))
c.execute('SELECT * FROM stocks WHERE symbol=?', ('RHAT',))
print c.fetchone()
我已经给出了sqlite3示例,因为它不需要pyodbc来尝试

更新

当使用将数据填充到模板中的过程时,似乎是在DBMS的服务器端完成的。通常没有方法或api从服务器获取查询的最终版本,如user581592的回答中所述。其他值得注意的链接位于pyodbc上,进一步讨论了这一点。另外,一些数据库库(如psycopg)添加了一个将返回final语句的方法。但正如他们在文档中提到的,这不是DB API的一部分。

pyodbc不会以任何方式修改SQL。一般来说,“好的”ODBC驱动程序也不需要

由于它不是受支持的函数,因此没有用于检索最终SQL的ODBC函数,因此pyodbc无法提供此功能

因此,最好将查询和参数分别记录在脚本中,或者如果可行的话,可以尝试在数据库上配置某种级别的查询记录