我在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)