在 Python 中为 Oracle 选择查询绑定变量

Posted

技术标签:

【中文标题】在 Python 中为 Oracle 选择查询绑定变量【英文标题】:Bind variables for Oracle select Query in Python 【发布时间】:2019-04-16 05:24:46 【问题描述】:

我正在尝试为 Oracle 数据库执行 select 语句。在我的选择语句中,我不需要直接给出表名,而是从复选框中检索它并在查询中给出它。尝试了一些代码,但最终出现错误...请在下面找到我的代码

if self.checkbox.isChecked():
    Text = self.checkbox.text
     self.cur.execute(“select * from :tblmn”,(text))
     print(cur)

连接和游标已经定义但没有在上面的代码中指定。请帮我解决这个问题。谢谢

【问题讨论】:

Binding variable to table name with cx_Oracle的可能重复 【参考方案1】:

这基本上是this问题的解决方案组合。您不能使用绑定表名,但可以通过字符串格式化来完成,这会增加 SQL 注入的风险。为避免这种情况,您可以使用 DBMS_ASSERT oracle 包,该包具有可以抛出的函数如果它不是有效的数据库对象 (dbms_assert.sql_object_name),则可能需要处理。 假设您使用的是 cx_Oracle,

cur = conn.cursor()
my_tabname = cur.callfunc('sys.dbms_assert.sql_object_name'
                             , cx_Oracle.STRING, ['employees'])
cur.execute("SELECT * from tablename".format(tablename=my_tabname))
for line in cur:
    print(line)

【讨论】:

以上是关于在 Python 中为 Oracle 选择查询绑定变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PDO 中为准备好的查询绑定参数?

Oracle 可选绑定变量

不使用多个内联选择的 Oracle SQL 查询

如何在oracle中为特定用户查询没有所有者名称的表名

为啥 Python 会在 Pygame 中为“事件”变量抛出未绑定的本地错误? [关闭]

如何在 oracle 数据库中为具有复杂聚合的数据透视编写等效的 sql 查询?