我有一个SQLite数据库,其中包含一个名为min
的表,该表具有一个名为name
的单列(TEXT),并且我想使用以下SQLite命令插入值。
INSERT OR IGNORE INTO min VALUES ('{}');
问题在于,当名称带有单引号时,问题标题出现错误。
这是一个使用pandas
来可视化表格的最小示例。
import sqlite3
import pandas as pd
db = "question.db"
#helper functions
def run_query(q):
with sqlite3.connect(db) as conn:
return pd.read_sql(q, conn)
def run_command(c):
with sqlite3.connect(db) as conn:
conn.isolation_level = None
conn.execute(c)
create_table =\
"""
CREATE TABLE IF NOT EXISTS min(
name TEXT
);
"""
run_command(create_table)
display(run_query("SELECT * FROM min;"))
insert_command = """\
INSERT OR IGNORE INTO min
VALUES ('{}');
"""
run_command(insert_command.format("Jules"))
display(run_query("SELECT * FROM min;"))
print(insert_command.format("O'Brien")) #visualize the command string
打印
INSERT OR IGNORE INTO min
VALUES ('O'Brien');
并运行命令本身
run_command(insert_command.format("O'Brien"))
收益:
---------------------------------------------------------------------------
OperationalError Traceback (most recent call last)
<ipython-input-8-e374715cfbec> in <module>()
1 print(insert_command.format("O'Brien"))
----> 2 run_command(insert_command.format("O'Brien"))
<ipython-input-3-0c8eb910c0ac> in run_command(c)
7 with sqlite3.connect(db) as conn:
8 conn.isolation_level = None
----> 9 conn.execute(c)
OperationalError: near "Brien": syntax error
转义单引号无济于事:
print(insert_command.format("O\\'Brien"))
打印
INSERT OR IGNORE INTO min
VALUES ('O\'Brien');
同样的错误也会发生
run_command(insert_command.format("O\\'Brien"))
如何避免引用此引号或解决该问题?我不希望将单引号替换为双引号,因为那样只会改变问题。