我使用ODBC(Python ODBC模块)连接到MS Access。代码的一部分将一些值放入DB中。看起来类似于:
for item in changes:
format_str = """INSERT INTO changes (short_description) VALUES ('{short_description}');"""
sql_command = format_str.format(short_description =item.short_description)
cursor.execute(sql_command)
cursor.commit()
问题是它返回syttaxt错误:
pypyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression
我发现这是因为对于一个案例我有像这样的短篇描述:
一旦调度,服务请求状态不会更改为“打开” 到另一个小组
OPEN后问题是“'”。
为您提供全面的图片。实际上我看到的字符串是:
一旦调度,服务请求状态不会更改为“OPEN” 到另一个小组
带有“\”的字符串我是从提供数据的应用程序的API获取的。它将“\”添加到转义字符串,但不是到处都是。
问题是 - 最简单的解决方法是什么? 从理论上讲,我可以替换\删除不需要的标志,但是如果我想保留原样呢?
对于任何其他情况,一切正常。
答案 0 :(得分:5)
你应该使用parameters来避免sql注入:
for item in changes:
sql_command = """INSERT INTO changes (short_description) VALUES (?);"""
cursor.execute(sql_command, (item.short_description,) )
cursor.commit()