逃离骑士。 OperationalError:语法错误

时间:2018-10-19 14:42:58

标签: python pandas sqlite python-3.6

我有一个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"))

如何避免引用此引号或解决该问题?我不希望将单引号替换为双引号,因为那样只会改变问题。

0 个答案:

没有答案