我正在尝试使用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)"
答案 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