我正在尝试为Oracle数据库执行select语句。在我的select语句中,而不是直接给出表名,我需要从一个复选框中检索它并将其提供给查询。尝试了一些代码,但最终出现错误...请在下面找到我的代码
if self.checkbox.isChecked():
Text = self.checkbox.text
self.cur.execute(“select * from :tblmn”,(text))
print(cur)
连接和游标已定义,但未在上面的代码中指定。请帮助我解决这个问题。谢谢
答案 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)