This question already has an answer here:
Python and sqlite3 throwing an error: sqlite3.OperationalError: near “s”: syntax error
(1个答案)
3年前关闭。
尝试向表中添加值时出现以下错误:
使用某些文本时会发生这种情况,如果我写的是常规内容,就没有问题,但是例如:
失败了..
这是我正在使用的代码:
感谢您的帮助人员:)
这两个
由于SQL参数只能用于值,而不能用于表之类的对象名,因此您仍将使用字符串格式来插入表名。您需要使 100%确定,您不接受
(1个答案)
3年前关闭。
尝试向表中添加值时出现以下错误:
line 33, in insert
c.execute("INSERT INTO {tn} (Process, Info) VALUES('{proc}',
'{inf}')".format(tn=table_name, proc=proc, inf=content))
OperationalError: near "s": syntax error
使用某些文本时会发生这种情况,如果我写的是常规内容,就没有问题,但是例如:
#. My item number one
#. My item number two with some more content
and it's continuing on the second line?
#. My third item::
Oh wait, we can put code!
#. My four item::
No way.
.. _bottom:
Go to top_'''
失败了..
这是我正在使用的代码:
def insert(table_name, proc, content):
conn = sqlite3.connect(sqlite_file)
conn.text_factory = str
c = conn.cursor()
c.execute("INSERT INTO {tn} (Process, Info) VALUES('{proc}',
'{inf}')".format(tn=table_name, proc=proc, inf=content))
conn.commit()
conn.close()
感谢您的帮助人员:)
最佳答案
语法错误是由于将包含元字符的数据插值到SQL查询中引起的。在您的特定示例中,您的数据包含一个'
字符,它表示字符串的结尾。然后,下一个字符s
是语法错误。
不要使用str.format()
将数据放入查询中。使用SQL参数并将适当的转义留给数据库驱动程序:
c.execute("INSERT INTO {tn} (Process, Info) VALUES(?, ?)".format(tn=table_name),
(proc, content))
这两个
?
字符充当数据库驱动程序的占位符,以插入(proc, content)
元组中的值。驱动程序将注意正确转义这些值。由于SQL参数只能用于值,而不能用于表之类的对象名,因此您仍将使用字符串格式来插入表名。您需要使 100%确定,您不接受
table_name
变量的任意不受信任的数据。例如,首先根据有效表名列表来审核该数据。关于Python-SQLite-OperationalError : near "s": syntax error,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45575608/
10-12 18:39