我在Python中使用cx_Oracle,无法将变量用作表名,如以下简单示例所示:

query = "select * from some.:usertable.userinfo"

bindvars = {'usertable':usertable}

cursor.execute(query, bindvars)


正确的语法是什么?当我使用WHERE…等时,变量替换可以正常工作,但不能与表名一起使用。我想我必须以某种方式分隔“:usertable” ...

最佳答案

数据库适配器很少支持对非“值”(需要引用的内容)使用参数。您可以使用字符串格式设置(狡猾的代码,冒着SQL注入的危险),也可以使用SQLAlchemy之类的库,让您使用Python代码生成有效的SQL。

如果确定您的usertable值是合理的(例如,对照现有表名列表进行检查),则可以进行以下操作:

query = 'select * from some.{usertable}.userinfo'.format(usertable=usertable)

10-07 14:26