【问题标题】:Python mySQL - escaping quotesPython mySQL - 转义引号
【发布时间】:2012-10-05 20:30:04
【问题描述】:

我在这个网站上看到过以各种方式提出的这个问题,但没有一个能完全解决我的问题。

我有一个带有单引号的 sql 语句,并且在使用它进行数据库查询之前尝试使用推荐的做法。所以声明就像

val2="abc 'dostuff'" 
sql="INSERT INTO TABLE_A(COL_A,COL_B) VALUES(%s,'%s')" %(val1, val2)
a_cursor.execute(sql)

但是,当我运行它时,我得到..

ProgrammingError: (1064,"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'dostuff'.

我做错了什么? 非常感谢 努普尔

【问题讨论】:

  • 尝试使用多行引号。 """ 或 '''

标签: python mysql mysql-python


【解决方案1】:

使用参数而不是字符串插值来确保您的值被数据库连接器正确转义:

sql = "INSERT INTO TABLE_A(COL_A,COL_B) VALUES(%s, %s)"
a_cursor.execute(sql, (val1, val2))

mysqldb sql参数样式使用与python字符串格式化操作符相同的语法,有点混乱。

【讨论】:

  • 哦,非常感谢!我在 Stackoverflow 上的其他地方读到过,在 Python 下,无法对查询进行参数化。我很高兴偶然发现你的答案!
  • 值没有被替换。我正在使用 python3
  • 信息不够。什么输入?什么预期输出?相反会发生什么?什么MySQL库,什么版本? Python 3 可能不是这里的一个因素。
  • 如何对列做同样的事情?我有一个我想使用的列的列表,我尝试做同样的事情,但它使用引号而不是字段名称的反引号
  • @whackamadoodle3000 列名不是数据; SQL参数的目的是防止数据被解释为数据以外的任何东西,因此将列名放在参数中是行不通的。您必须使用字符串格式,但在这样做时必须非常小心不要使用不受信任的数据。在这种情况下,最好使用 SQLAlchemy 等 SQL 生成库。
猜你喜欢
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 2011-06-13
  • 2014-03-02
  • 1970-01-01
  • 2010-10-27
相关资源
最近更新 更多