1064, “您的 SQL 语法有错误;...” Python MySQL

5 python mysql salesforce mysql-python python-2.7

所以我从上周五开始就一直在研究这个,无法解决这个错误:

1064,“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '[u'161010-035670'] WHERE order_id=87' 附近使用正确的语法”或类似内容与此错误相同的行。

基本上我的python将从MySQL数据库中获取数据,它使用Simple-Salesforce在SalesForce中创建一个案例,然后查询它正确创建的案例,但我需要它将该案例编号写回我专门为票证创建的列中的数据库数字。

当前代码:

for rowx in xrange(1, sheet.nrows):
    SN = sheet.row_values(rowx, start_colx=3, end_colx=None)[0]
    print SN
    Id = sheet.row_values(rowx, start_colx=6, end_colx=None)[0]
    print Id
    d = sf.query("SELECT CaseNumber FROM Case WHERE Serial_Number__c ='%s' AND Status = 'New Portal RMA'" % SN)

    data = [e["CaseNumber"] for e in d["records"]]
    print (data)



    try:
        con = MySQLdb.connect(user=ur, passwd=pd, host=ht, port=pt, db=db)
        cursor = con.cursor()

        cursor.execute("UPDATE rma_order SET rma_num=%s WHERE order_id=%s" % (data, Id))

        con.commit()
    except Error as error:
        print(error)

    finally:
        cursor.close()
        con.close()
Run Code Online (Sandbox Code Playgroud)

主要问题是这行代码:

 cursor.execute("UPDATE rma_order SET rma_num=%s WHERE order_id=%s" % (data, Id))
Run Code Online (Sandbox Code Playgroud)

我试过有和没有 '%s' 没有区别,试过 "...WHERE order_id=%s", (data, Id)) 有同样的错误。如果我替换 "order_id=87" 并让数据保留在 cursor.execute("UPDATE rma_order SET rma_num=%s WHERE order_id=87" % (data)) 然后它工作正常并将正确格式的案例编号写入数据库,只要我添加“Id”作为 %s 的一个因素,它就会给我错误。我也用 %d 尝试过,结果相同。

任何帮助将不胜感激。

ale*_*cxe 6

data值是一个列表,您正在尝试将其格式化为查询。并且,不要使用字符串格式将变量插入到查询中——而是使用适当的查询参数化

cursor.execute("""
    UPDATE 
        tplinkus_rma.rma_order 
    SET 
        rma_num=%s 
    WHERE 
       order_id=%s""", (data[0], Id))
Run Code Online (Sandbox Code Playgroud)

请注意查询参数如何放置在元组中并作为单独的参数传递。

  • 伙计.... 我在这个尝试不同的方法上花了 10 多个小时,你在点击“添加评论”所花费的所有时间里解决了它。谢谢你 (2认同)