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

2024-02-23

当使用像这样的数据库库时pyodbc http://code.google.com/p/pyodbc/实施Python 数据库 API 规范 http://www.python.org/dev/peps/pep-0249/应用参数替换后如何获得完全准备好的查询。我正在调用 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()

预期的最终查询(将被记录)

CREATE TABLE stocks (symbol varchar(10), price real)
INSERT INTO stocks VALUES ('RHAT', 35.14)
SELECT * FROM stocks WHERE symbol = 'RHAT'

sqlite3 示例

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 来尝试。

UPDATE

似乎当一个人使用准备好的陈述 http://en.wikipedia.org/wiki/Prepared_statements将数据填充到模板中的过程是在 DBMS 的服务器端完成的。因此,通常没有方法或 API 可以从服务器获取查询的最终版本,如 user581592 的答案中所述。其他值得注意的链接是第163期 http://code.google.com/p/pyodbc/issues/detail?id=163在 pyodbc 上进一步讨论了这一点。另外一些数据库库(例如 psycopg)添加了一个方法mogrify http://initd.org/psycopg/docs/cursor.html#cursor.mogrify这将返回最终的语句。但正如他们的文档中提到的,这不是 DB API 的一部分。


From https://groups.google.com/forum/#!topic/pyodbc/656mRdbjFuc https://groups.google.com/forum/#!topic/pyodbc/656mRdbjFuc

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

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

因此,最好的选择可能是在脚本中单独记录查询和参数,或者如果可行的话,您可以尝试在数据库上配置某种级别的查询日志记录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取发送到数据库的准备好的查询 的相关文章

随机推荐

  • 如何找到矩形周长中距离给定点最近的点?

    这是一个与语言无关的问题 给定一个矩形的尺寸l t w h 左 上 宽 高 和一个点x y 如何找到矩形周长上距离该点最近的点 我尝试用 Lua 解决这个问题 但任何其他语言都可以 到目前为止 这是我最大的努力 local function
  • 如何使用“pass”语句?

    我正在学习Python 我已经到达了关于pass陈述 我使用的指南将其定义为通常用作占位符的空语句 我仍然不完全明白这意味着什么 什么是简单 基本的情况 其中pass将使用声明以及为什么需要它 假设您正在设计一个新类 其中包含一些您还不想实
  • 数组语法与指针语法和代码生成?

    在书里 理解和使用 C 指针 作者 理查德 里斯 http shop oreilly com product 0636920028000 do第85页说 int vector 5 1 2 3 4 5 生成的代码是vector i 与生成的代
  • 让 QLineEdit 检测 Tab 键按下事件?

    我在文档中找不到任何内容 我找到了一个使用 PyQt 或其他东西的解决方案 但我宁愿不必使用它 另外 如果有信号就好了 但看起来没有 1 当您按照 Sam 建议安装事件过滤器时 m lineEdit gt installEventFilte
  • 我应该将函数的结果存储到数组中吗?

    我有一个这样的函数 function time elapsed string ptime date time strtotime 1348 10 10 04 30 01 ptime year date Y date time month d
  • 从 ASP.NET MVC 中的 DropDownList 获取默认 NULL 值

    我正在创建一个Trailer对于现有的Driver 可以从下拉列表中选择 Html DropDownListFor x gt x Driver driverID SelectList ViewBag DriverID Please Sele
  • 在 C# 中使用 BCC 不带 TO 通过 SMTP 发送邮件

    我正在尝试使用System Net Mail MailMessageC 中的类来创建一封电子邮件 该电子邮件将通过以下方式发送到电子邮件地址列表BCC 我不想包括TO地址 但似乎我必须这样做 因为如果我使用空字符串作为TO地址在MailMe
  • 在C++中,如何在第一个'system()'结束后才执行第二个'system()'?

    请参阅下面的代码 如果有任何替代系统可以满足我的要求 那就太好了 strcat comando1 start c arquiv 1 winrar rar a D sisbibbkp teste1 strcat comando1 data s
  • 使用 base64 字符串的 C# LinkedResource

    我该怎么说 gt url data image jpeg base64 9j 4AAQSkZJRgABAgEASABIAAD 2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB into new
  • 如何使用! scala 中的运算符?

    我是 Scala 的新手 正在尝试一些基本操作来掌握这门语言 我正在尝试使用逻辑运算符 例如 val a2 0x01 0xFF println a2 我想对a2的值求负然后打印出来 但它给了我一个错误说 value unary is not
  • XML 命名空间“clr-namespace:YYY”中不存在标记“XXX”

    我已经实现了一个转换器 将 Int32 转换为 String 以便能够将属性绑定到文本框 我在命名空间 MyApp Converters 中实现了这个转换器 它被称为 Int32ToStringConverter 然后 在我的 axml 中
  • R:删除向量的最后一个元素

    如何删除动物园系列的最后 100 个元素 我知道名称 元素 符号 但我无法减去整个部分 我喜欢用head因为这样更容易打字 其他方法可能执行得更快 但我很懒 而我的计算机却不是 x lt head x 100 gt head 1 102 1
  • Pynput 键盘记录器仅返回 Shift、Command、空格和 Capslock 键

    我希望这个问题没有在之前的帖子中讨论过 我的搜索结果没有返回任何相关内容 但请随时启发我 我正在编写一个非常基本的 Python 键盘记录器 作为一个更大项目的一部分 我使用 pynput 来监听击键 并使用日志记录模块将它们写入 txt
  • 如何将数据读入Tensorflow?

    我正在尝试将数据从 CSV 文件读取到张量流 https www tensorflow org versions r0 7 how tos reading data index html filenames shuffling and ep
  • 如何禁用 VS Code“扩展开发主机”中的所有无关扩展而不覆盖我的正常用户配置?

    我正在尝试在 VSCode 扩展上进行调试 开发 为此 我需要在调试 扩展开发主机 中禁用所有 许多 其他扩展 然而 这样做 saves我的用户首选项 然后导致 我所有其他 VScode 实例 停止拥有任何扩展 如何在 扩展开发主机 中禁用
  • 发送简单的文本(不是电子邮件)到 SpamAssassin

    我想知道是否可以向 SpamAssassin 发送简单的文本 我想将评论放入文本文件中并调用 spamc 我相信您可以禁用任何引用标头的 SA 规则 但由于 消息 格式错误 它可能仍然会中断 即使没有 SA 评分也过于依赖标头 因此在不检查
  • Meteor 服务器 Websocket

    我正在寻找在 Meteor 服务器 而不是客户端 上创建一个 websocket 以连接到外部网站 我知道我要访问的 URL 以及期望的数据 但我不清楚如何准确地创建 websocket 本身 我所做的所有搜索都为我提供了客户端解决方案 但
  • HTML5 WebStorage 数据是如何物理存储的?

    在使用 HTML5 WebStorage 功能时 我知道某些浏览器 例如 Chrome 具有开发人员工具 使用户能够浏览其 WebStorage 的内容以进行调试和故障排除 我想知道是否可以查看文件系统中网络存储的内容 此内容是否存储在文件
  • 在 WPF ComboBox 中设置默认值

    我正在使用 ComboBox ItemsSource 属性绑定来显示从列表到组合框的项目 以下是代码
  • 如何获取发送到数据库的准备好的查询

    当使用像这样的数据库库时pyodbc http code google com p pyodbc 实施Python 数据库 API 规范 http www python org dev peps pep 0249 应用参数替换后如何获得完全