在python上的MySQL查询中转义引号

时间:2017-07-03 19:37:13

标签: python mysql python-3.x mysql-real-escape-string pymysql

我正在尝试用我的SQL查询中的引号解决问题。我知道在stackoverflow上提出了很多问题。但没有人为我工作。可能是因为我正在使用其他框架(pyMySQL)进行sql连接。我试过参数化的mysql查询:

    conn = pymysql.connect(host ='host', user='user', passwd='user', db='db', charset='utf8mb4')
    cur = conn.cursor()
    cur.execute("USE db")
    cur.execute("UPDATE table SET callback_data = %s, message = %s, photo = %s, location = %s, first_name_last_name = %s WHERE user_id=%s",
(callback_data, message, photo, location, first_name_last_name, user_id))
    cur.connection.commit()
    cur.close()
    conn.close()

但我总是得到%s的错误(错误消息:预期,得到%s)。我的python版本是3.6.1。我如何在我的SQL查询中转义引号?谢谢。

1 个答案:

答案 0 :(得分:0)

首先,正如Ilja所说,你必须使用反引号来保存mysql。

然后对于text / varchar字段,您可以使用json转储:

import json

[...]

cur.execute("UPDATE `table` SET callback_data = %s, message = %s, photo = %s, location = %s, first_name_last_name = %s WHERE user_id=%s", % (
  json.dumps(callback_data),
  json.dumps(message),
  json.dumps(photo),
  json.dumps(location),
  json.dumps(first_name_last_name),
  json.dumps(user_id)
  )