【问题标题】:pyodbc execute command not accepting ? parameters correctly?pyodbc 执行命令不接受?参数正确吗?
【发布时间】:2017-07-19 18:31:22
【问题描述】:

这段代码:

cursor.execute('select RLAMBD from ?', OPTable)
print cursor.fetchone().RLAMBD

产生这个错误:

ProgrammingError: ('42S02', '[42S02] [Oracle][ODBC][Ora]ORA-00903: invalid table name\n (903) (SQLExecDirectW)')

OPTable 是一个字母数字字符串,它是我从另一个数据库查询中构建的,其中包含我要从中选择的表名。

以下代码在同一脚本中运行良好。

sql = 'select RLAMBD from ' + OPTable
cursor.execute(sql)
print cursor.fetchone().RLAMBD

我想以这种方式构建 sql 语句并不是什么大不了的事,但我只是不明白为什么它不接受 ?参数。我什至在同一个脚本中有另一个查询,它使用 ?参数化并且工作得很好。不过,工作查询的参数是使用 raw_input 函数生成的。这两个字符串的格式化方式之间是否存在一些细微的差异,这会阻止我让查询工作?谢谢你们。

我正在运行 python 2.7 和 pyodbc 3.0.10。

【问题讨论】:

  • 我不认为可以像这样将表名作为参数传入,但我可能错了。

标签: sql python-2.7 oracle11g pyodbc


【解决方案1】:

参数占位符不能用于表示对象名称(例如,表或列名称)或 SQL 关键字。它们仅用于传递数据,例如数字、字符串、日期等。

【讨论】:

  • 啊,好吧,开枪。那么是以我有“正确”的方式单独构建字符串吗?
  • 是的,在这种情况下,我们需要“组装”SQL 命令文本,但请注意,我们仍应为使用参数,例如,sql = 'SELECT colname FROM "{}" WHERE id=?'.format(table_name)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 2013-03-15
相关资源
最近更新 更多