使用python mysql.connector转义字符串

时间:2011-09-24 17:55:39

标签: python mysql

我正在尝试使用python和mysql.connector将一串字符串插入到mysql中。我当前的代码看起来像这样:

db = mysql.connector.Connect('config blah blah')
cursor = db.cursor()
data = (somestring1, somestring2)
sql = "INSERT INTO mytable (col1, col2) VALUES ('%s', '%s')"
cursor.execute(sql, data)

我该如何逃避弦乐?我可以尝试在python中进行,但我知道这不是正确的方式。

注意:我意识到mysql.connector仍处于开发阶段。

更新

第4行应为:

sql = "INSERT INTO mytable (col1, col2) VALUES (%s, %s)"

4 个答案:

答案 0 :(得分:14)

infrared的答案是最好的方法。

但是,如果你真的需要转义一些任意字符串,你可以这样做(在2.1.6之前):

db = mysql.connector.connect(......)

new_str = db.converter.escape('string to be escaped')

较新版本(使用低级C-API):

db = mysql.connector.connect(......)

new_str = db._cmysql.escape_string('string to be escaped')

答案 1 :(得分:10)

由于mysql.connector符合DB API v2.0,因此您无需自行转义数据,它会自动为您执行此操作。

答案 2 :(得分:0)

实际上,最好的方法是让模块自己转义值。如果您绝对需要手动执行此操作(例如,我只想在脚本的调试模式下打印SQL,而mysql.connector似乎没有实现mogrify()),那么还有另一种选择:

>>>> import mysql.connector
>>>> cnx = mysql.connector.connect()
>>>> cur = cnx.cursor()
>>>> cur._connection.converter.escape("tic ' toc")
"tic \\' toc"

诚然,它仍然使用“非公共API”,但至少在最新版本之间是一致的(到目前为止;已在2.0.4、2.1.3、2.2.9、8.0.16上进行测试)。

答案 3 :(得分:-1)

您可以使用 SELECT col.x, col.y, COALESCE(col.z, 0) FROM table WHERE COALESCE(col.z, 0) > 0; 包执行此操作:

pymysql

那么你可以这样做:

import pymysql
from pymysql.converters import escape_string
from mysql.connector import connect, Error