【发布时间】:2021-06-16 04:42:27
【问题描述】:
我在 Python 中使用 cx_Oracle,无法将变量用作表名,就像在这个简单的示例中一样:
query = "select * from some.:usertable.userinfo"
bindvars = {'usertable':usertable}
cursor.execute(query, bindvars)
什么是正确的语法?当我使用 WHERE... 等时,变量替换工作正常,但不适用于表名。我想我必须以某种方式分隔“:usertable”......
【问题讨论】:
-
数据库适配器很少支持对任何不是“值”的东西(需要引用的东西)使用参数。要么使用字符串格式(狡猾,你冒着 sql 注入的风险),要么使用像 SQLAlchemy 这样的库,它可以让你使用 Python 代码生成有效的 SQL。
-
@septi:我认为使用表名作为绑定变量是不可能的,你需要创建一个动态语句,通过将表名附加到你的 select 语句。
-
好的,谢谢,至少我可以停止浪费我的时间了 ;-) 你能添加一个答案,以便我接受吗?