15

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

我有一个带有单引号的 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'.

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

4

1 回答 1

45

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

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

mysqldb sql 参数样式使用与 python 字符串格式化运算符相同的语法,这有点令人困惑。

于 2012-10-15T19:50:16.783 回答