2017-07-03 103 views
0

我想在我的SQL查询中解决引号问题。我知道在stackoverflow上有很多问题。但没有人为我工作。可能是因为我正在使用其他框架(pyMySQL)进行sql连接。我试过参数化的mysql查询:在python上的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

“表” 是一个[保留字(https://开头开发。 mysql.com/doc/refman/5.7/en/keywords.html),所以你必须用反引号引用它,以便用它作为标识符。否则你的调用执行和查询字符串似乎很好。元组中有6个占位符和6个参数。 –

回答

0

首先,正如Ilja所说,你必须使用反引号保留mysql的话。

然后你可以使用JSON文本/ VARCHAR字段转储:

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) 
)