Переменные связывания для Oracle выберите Query in Python - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь выполнить оператор выбора для базы данных Oracle.В моем операторе select вместо того, чтобы давать имя таблицы напрямую, мне нужно извлечь его из флажка и указать в запросе.Попробовал некоторый код, но в результате возникла ошибка ... Пожалуйста, найдите мой код ниже

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

Соединение и курсор уже определены, но не указаны в коде выше.Пожалуйста, помогите мне в решении этой проблемы.Спасибо

1 Ответ

2 голосов
/ 16 апреля 2019

Это в основном комбинация решений этого вопроса. Вы не можете использовать имя таблицы привязки, но это можно сделать с помощью форматирования строки, что увеличивает риск 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)
...