SQL ОБНОВЛЕНИЕ в python Подстановка строк частично работает - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь использовать sqlite3 с python3 для создания элементарной системы баз данных. Я создал базу данных и теперь хочу узнать, как ее обновить. Следующая функция работает и выдает желаемый результат:

def update_db(table_name,column_name):
    con = db_connect()
    cur = con.cursor()
    id_column  ='first_name'
    update_sql = """ UPDATE {}  SET {} = 'hi' where {} = "ID_0-1" """.format(table_name, column_name, id_column)
    cur.execute(update_sql)
    con.commit()

Однако, если я пытаюсь обобщить оператор update_ sql следующим образом:

def update_db(table_name,column_name):
    con = db_connect()
    cur = con.cursor()
    id_column  ='first_name'
    value = 'hi'
    id_value = "ID_0-1"
    update_sql = """ UPDATE {}  SET {} = {} where {} = {} """.format(table_name, column_name, value, id_column, id_value)
    cur.execute(update_sql)
    con.commit()

, я получаю следующую трассировку:

Traceback (most recent call last):
  File "database_intialisation.py", line 97, in <module>
    fill_column(table_name, column_name)
  File "database_intialisation.py", line 77, in fill_column
    cur.execute(update_sql)
sqlite3.OperationalError: no such column: hi

Я также пробовал% s метод подстановки строк, и он дает аналогичные результаты.

Ответы [ 2 ]

2 голосов
/ 13 января 2020

Попробуйте, используя заполнитель ?:

update_sql = """ UPDATE {}  SET {} = ? where {} = ? """.format(table_name, column_name, id_column)
cur.execute(update_sql, (value, id_value))

Ваш 'hi' вставляется в оператор как hi, и он пытается установить значение вашего столбца равным значению будет в столбце hi.

1 голос
/ 13 января 2020

Изменить sql строку на:

""" UPDATE {}  SET {} = '{}' where {} = '{}' """

Примечание: у этого подхода много проблем, и вы должны использовать parameterized query

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...