Вы не должны помещать текст непосредственно в операторы SQL INSERT; это вызывает проблемы , если вы не будете осторожны.
Предпочтительным подходом является использование параметризованных запросов. Таким образом, вам не нужно иметь дело с экранированием строк.
В C API используйте семейство функций sqlite3_bind _ *.
В модуле Python sqlite3 передать параметры в качестве отдельного аргумента execute
.
>>> import sqlite3
>>> db = sqlite3.connect(':memory:')
>>> db.execute("CREATE TABLE Table1 (A TEXT, B TEXT)")
<sqlite3.Cursor object at 0xe2fa80>
>>> dbl_minus = 'Text -- with -- double minus'
>>> multiline = 'Text\nwith\nline\nbreaks'
>>> db.execute("INSERT INTO Table1 VALUES (?, ?)", (dbl_minus, multiline))
<sqlite3.Cursor object at 0xe2fb30>
>>> db.execute("SELECT * FROM Table1").fetchall()
[('Text -- with -- double minus', 'Text\nwith\nline\nbreaks')]