Python:sqlite3.OperationalError:在“ <”附近:语法错误(使用HTML源代码更新sqlite3字段)

时间:2019-05-28 14:07:52

标签: python python-3.x sqlite

我想更改sometext字段中所有sometext的出现(匹配所有案例组合,例如SOMETEXTSOmeTExtnote) sqlite的表格itemNotes

因为sqlite不支持不区分大小写的更新(我已经问了两个问题herehere),所以我正在使用pythonregex

但是我收到此错误: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)

1 个答案:

答案 0 :(得分:1)

来自sqlite doc

  

REPLACE命令是“ INSERT OR REPLACE”变体的别名。   INSERT命令。

INSERT没有WHERE子句。该查询需要写为“常规” INSERT,并且系统将“决定”是否替换。类似于INSERT into itemNotes (itemID,note) VALUES (?,?)。 (注意,上面示例中的data列表的顺序需要更改。)