我想更改sometext
字段中所有sometext
的出现(匹配所有案例组合,例如SOMETEXT
,SOmeTExt
,note
) sqlite的表格itemNotes
。
因为sqlite不支持不区分大小写的更新(我已经问了两个问题here和here),所以我正在使用python
和regex
。
但是我收到此错误:sqlite3.OperationalError: near "<": syntax error
的{{1}}匹配行
我的代码中没有cursor.execute(f'REPLACE
,因此我认为它来自包含HTML源代码的<
字段。
这是我的代码:
note
查找“ sql注入”后,这就是我想出的内容:
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 = "REPLACE INTO itemNotes (note) VALUES (?) where itemID = (?)"
data = (row_regex_replaced, rowindex,)
cursor.execute(sql, data)
答案 0 :(得分:1)
来自sqlite doc:
REPLACE命令是“ INSERT OR REPLACE”变体的别名。 INSERT命令。
INSERT
没有WHERE
子句。该查询需要写为“常规” INSERT,并且系统将“决定”是否替换。类似于INSERT into itemNotes (itemID,note) VALUES (?,?)
。 (注意,上面示例中的data
列表的顺序需要更改。)