Я бы хотел изменить все вхождения 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