Python - SQL语句中的特殊字符

rdr*_*rdr 2 python pypyodbc

我使用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()
Run Code Online (Sandbox Code Playgroud)

问题是它返回syttaxt错误:

pypyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 
Run Code Online (Sandbox Code Playgroud)

我发现这是因为在一个案例中我有像这样的short_description:

一旦分派到另一个组,服务请求状态不会更改为"打开"

OPEN之后的问题是"'".

为您提供全面的图片.实际上我看到的字符串是这样的:

一旦分派到另一个组,服务请求状态不会更改为"OPEN"

带有"\"的字符串我是从提供数据的应用程序的API获取的.它为转义字符串添加了"\",但并非随处可见.

问题是 - 最简单的解决方法是什么?从理论上讲,我可以替换\删除不需要的标志,但万一我想保留原样呢?

对于任何其他情况,一切正常.

dan*_*era 5

你应该使用参数来避免sql注入:

for item in changes:
  sql_command = """INSERT INTO changes (short_description) VALUES (?);"""
  cursor.execute(sql_command, (item.short_description,) )
  cursor.commit()
Run Code Online (Sandbox Code Playgroud)