Python - SQL语句中的特殊字符

时间:2017-12-13 13:55:57

标签: 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()

问题是它返回syttaxt错误:

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

我发现这是因为对于一个案例我有像这样的短篇描述:

  

一旦调度,服务请求状态不会更改为“打开”   到另一个小组

OPEN后问题是“'”。

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

  

一旦调度,服务请求状态不会更改为“OPEN”   到另一个小组

带有“\”的字符串我是从提供数据的应用程序的API获取的。它将“\”添加到转义字符串,但不是到处都是。

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

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

1 个答案:

答案 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()