pysqlite:列名或表名的占位符替换?

2023-12-28

使用 pysqlite 我正在制作一个程序来处理一些数据。对多个表和列中的相似字段进行相同的操作,因此我认为可以将sql语句参数化,如下所示:

def foo():
  column = 'c'
  table = 't'
  row = 1
  # preferred approach, gives syntax error
  c.execute('SELECT ? FROM ? WHERE id=?', (column, table, row))
  # sanity check, works fine
  c.execute('SELECT c FROM t WHERE id=?', (row))
  # workaround, also works, but is this the right way?
  c.execute('SELECT % FROM % WHERE id=?' % (column, table), row))

我得到的错误不是很有帮助(sqlite3.OperationalError: near "?": syntax error),但我明白了:Pysqlite 不喜欢以这种方式使用占位符。

谁能指出这里发生了什么以及执行上述操作的正确方法?


您根本不能对列名或表名使用占位符。我对此没有权威的引用——我只是通过尝试和失败才“知道”这一点。不过,这还是有一定道理的:

  • 如果列和表可以参数化,那就没什么了 准备的目的(execute-ing) 获取之前的 SQL 语句,因为该语句的所有部分都可以是 更换。
  • I'm not sure about pysqlite1, but MySQLdb automatically quotes all string parameters. Column and table names should not be quoted. So it would complicate the parsing required by the driver if it had to decide if a placeholder represented a column or table name versus a value that needs quoting.

简而言之,您找到了正确的方法——使用字符串格式。

c.execute('SELECT {} FROM {} WHERE id=?'.format(column, table), row))

1 Not all drivers quote parameters -- oursql doesn't, since it sends SQL and arguments to the server separately.

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

pysqlite:列名或表名的占位符替换? 的相关文章

随机推荐

  • 我得到了错误的客户端 IP 地址

    我正在运行 ASP NET 应用程序 Web 服务器位于同一系统上 在后面的代码中我只想获取请求客户端的IP地址 我正在使用这段代码 Request UserHostAddress 但我得到了一个错误的地址 127 0 0 1 我的系统IP
  • Rails own_to 关联(带有 :class_name)返回 nil

    我对 Rails 开发比较陌生 并且遇到了一个小的关联问题 我想将一个关联命名为与其所链接的模型不同的名称 我有以下2个型号 class User lt ActiveRecord Base has many events end class
  • SecurityException:不允许启动服务

    在我们的应用程序中 我们有一个Service以这种方式定义
  • 在 Angular.js $http 请求之后,无论 Promise 成功还是失败,都调用完整的函数

    我怎样才能确保complete 无论 http 调用的结果如何 函数都会使用 Angular js 提供的 Promise API 运行吗 http method POST url submitUrl data scope data suc
  • 在 Sublime Text 中如何复制没有行尾字符的行

    在 ST3 中 您只需使用 ctrl c 即可复制整行 这非常有用 唯一的问题是该命令还会复制 返回 或换行符 因此例如当您复制一行并粘贴到控制台中时它将立即运行该命令 这是不可取的 因为我想在运行命令之前先对其进行编辑 这迫使我手动突出显
  • R 神经网络包 - net.result 显示什么?

    使用以下代码 我构建了一个神经网络模型来预测收盘价 library neuralnet myformula lt close High Low Open nn close lt neuralnet myformula data train
  • OAuth2 访问令牌中允许使用哪些字符?

    RFC6749 https www rfc editor org rfc rfc6749 and RFC6750 https www rfc editor org rfc rfc6750对于 OAuth2 访问令牌中允许使用哪些字符 似乎彼
  • 在 python-social-auth 中从 google 和 facebook 检索个人资料图片

    如何通过扩展管道使用 python social auth 从 google 和 facebook 检索个人资料图片和出生日期 我读过 我可以创建函数来执行此操作并设置它们的路径 但我不知道必须检索的属性名称 请帮忙 要从社交登录获取头像
  • Eclipse 着色:所有出现的选择的背景颜色的首选项目是什么

    在 Eclipse 中 当单击标识符 函数名称或变量等 时 给出了该标识符的背景以及该标识符的所有其他出现情况 不同的背景颜色 谁能告诉我 为此更改背景颜色的首选项是什么 最后这个保留在我的黑暗日食设置中 有一个部分标题为注释允许您配置背景
  • SQL Server:找不到数据类型日期且无法设置兼容性

    我有一个使用 DATE 的安装脚本 我正在运行 SQL Server 2008 R2 它不喜欢日期类型 Msg 2715 Level 16 State 7 Line 1 Column parameter or variable 3 Cann
  • 这个符号 () => 在 Javascript 中是什么意思? [复制]

    这个问题在这里已经有答案了 您可以在这段代码的第一行看到 gt 符号 const server http createServer req res gt res statusCode 200 res setHeader content ty
  • 解析/使用来自 3rd 方依赖项的多个程序集版本

    在我的项目中 我遇到了依赖层次结构的问题 我使用一个图书馆 可写位图扩展 http writeablebitmapex codeplex com 在我的代码中 我还有另一个也使用 WriteableBitmapExtensions 的第 3
  • CodeIgniter 更新查询执行两次

    我正在使用 CodeIgniter 2 2 每次访问页面时 我都必须用 1 更新数据库 代码可以工作 但每次都会增加 2 示例 如果total views 2 一旦页面被点击total views应该3 但数据库中的值为4 我确定我正在调用
  • 为什么 Impala 花费大量时间打开 HDFS 文件(TotalRawHdfsOpenFileTime)?

    我发现我的Impala swarm表现不稳定 正常情况下只需要几秒 不到10s 就可以完成一个查询 但偶尔会需要40s以上 而且这种情况会持续几分钟 当偏偏 根据配置文件 TotalRawHdfsOpenFileTime 非常高 这意味着大
  • 从 webpack 传递较少的变量

    当然 我试图将 webpack 配置中的 less 变量传递给 less 加载器 由于某种原因 变量未正确传递 我无法弄清楚正确的语法 该变量具有在构建时在 webpack 配置文件中确定的动态内容 这是相关的行 我已经尝试过它的许多变体
  • Junit 在仍然通过测试时抛出警告

    我目前正在开发一个项目 我们正在使用 junit 进行测试 但由于它仍处于相当早期的阶段 许多功能尚未实现 尽管他们已经为它们编写了测试 这意味着这些测试 显然 总是失败 我想知道是否有人知道如何让 JUnit 在显示警告的同时通过测试 最
  • Vue 和 Webpack 中的动态导入路径

    我正在 VueJS 2 和 Vue CLI 3 中创建一个前端项目 该项目将由不同的客户端使用 我希望能够导入基本上我需要的所有内容 JS 文件 如 mixins 和组件代码以及 CSS LESS 文件 在 webpack 构建过程中 基于
  • CsQuery 解析 li 项的集合

    这是我的代码 CQ dom CQ Create htmlString var items dom blog accordion li foreach var li in items var newTournament false var t
  • gurobipy 中的反向指标约束

    我是 gurobipy 的初学者 我想添加一个反向指标约束 指标约束只不过取决于约束是否成立的二元变量 在 gurobipy 中 这写为 model addConstr x 1 gt gt y z lt 5 其中 x 是二进制变量 y 和
  • pysqlite:列名或表名的占位符替换?

    使用 pysqlite 我正在制作一个程序来处理一些数据 对多个表和列中的相似字段进行相同的操作 因此我认为可以将sql语句参数化 如下所示 def foo column c table t row 1 preferred approach