Python: sqlite3.OperationalError: вблизи "<": синтаксическая ошибка (обновление поля sqlite3 с помощью исходного кода html) - PullRequest
0 голосов
/ 28 мая 2019

Я бы хотел изменить все вхождения sometext (в соответствии со всеми комбинациями регистров, например sometext, SOMETEXT, SOmeTExt) в поле note таблицы itemNotes sqlite.

Поскольку sqlite не поддерживает обновление без учета регистра (я уже задавал 2 вопроса здесь и здесь ), я использую python и regex.

Но я получаю эту ошибку: sqlite3.OperationalError: near "<": syntax error совпадающая строка cursor.execute(f'REPLACE

У меня нет < в моем коде, поэтому я думаю, что это происходит из поля note, котороесодержит исходный код HTML

Вот мой код:

keyword ="sometext"
replacement_word="abc"

# load sqlite3
db = sqlite3.connect(path_to_sqlite)
cursor = db.cursor()

# search for all therm
cursor.execute(f'SELECT * FROM itemNotes  WHERE note like "%{keyword}%"')
print("\nfetch one:")
# itemID_list = cursor.fetchone()

# pour chacun des result, change
for row in cursor.fetchall():
    # print(each)
    row_regex = re.compile(re.escape(keyword), re.IGNORECASE)
    row_regex_replaced = row_regex.sub(replacement_word, row[2])

    rowindex = row[0]
    cursor.execute(
        f'REPLACE INTO itemNotes (note) VALUES ({row_regex_replaced}) where itemID = {rowindex}')

После поиска "sql инъекция", вот что я придумал:

sql = "REPLACE INTO itemNotes (note) VALUES (?) where itemID = (?)"
data = (row_regex_replaced, rowindex,)
cursor.execute(sql, data)

Но сейчасЯ получаю эту ошибку: sqlite3.OperationalError: near "where": syntax error

1 Ответ

1 голос
/ 28 мая 2019

Из sqlite doc :

Команда REPLACE является псевдонимом для варианта INSERT или REPLACE команды INSERT.

У INSERT нет предложения WHERE.Запрос должен быть записан как «обычная» INSERT, и система «решит», заменить ли.Что-то вроде INSERT into itemNotes (itemID,note) VALUES (?,?).(Обратите внимание, что порядок списка data в приведенном выше примере нужно будет изменить).

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