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

时间:2019-04-16 05:24:46

标签: python oracle pyqt5 bind-variables

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

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

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

1 个答案:

答案 0 :(得分:2)

这基本上是对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)
相关问题