【问题标题】:Python - special characters in SQL statementPython - SQL 语句中的特殊字符
【发布时间】:2017-12-13 13:55:57
【问题描述】:

我正在使用 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()

问题是它返回语法错误:

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

我发现这是因为对于一个案例,我有这样的 short_description:

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

问题在于 OPEN 之后的“'”。

在这里为您提供完整的图片。实际上我看到的字符串是这样的:

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

我从提供数据的应用程序的 API 中获得带有“\”的字符串。它添加“\”来转义字符串,但不是在所有地方。

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

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

【问题讨论】:

    标签: python pypyodbc


    【解决方案1】:

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

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

    【讨论】:

    • 嘿 Dani,如果我必须在带有符号 $ 的字段上做一个 where 怎么办?谢谢你
    猜你喜欢
    • 2014-10-31
    • 2020-06-27
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多