2016-10-10 1 views
2

Так что я работал над этим, так как в прошлую пятницу и не может обойти эту ошибку:1064, «У Вас есть ошибка в вашем SQL синтаксиса; ...» Python MySQL

1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[u'161010-035670'] WHERE order_id=87' at line 1" or something along the same lines as this error.

В основном мой питон будет захватывать данные из базы данных MySQL, он создает случай в SalesForce, используя Simple-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() 

Главная проблема связана с этой строки кода:

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

Я попытался с и без '% s' без разницы, пытался»... WHERE order_id =% s ", (data, Id)) с той же ошибкой. Если я заменю «order_id = 87», и пусть данные остаются там с cursor.execute («UPDATE rma_order SET rma_num =% s WHERE order_id = 87"% (данные)), тогда он отлично работает и записывает номер дела в правильном формате в базы данных, как только я добавлю «Id» в качестве фактора с% s, это даст мне ошибки. Я также попытался с% d с тем же результатом.

Любая помощь была бы принята с благодарностью.

ответ

3

Значение data является и вы пытаетесь отформатировать его в запросе. И, не используют строки форматирования для вставки переменных в запросе - использовать правильную параметризацию запроса вместо:

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

Обратите внимание, как параметры запроса помещаются в кортеж и передается как отдельный аргумент.

+2

Человек .... Я потратил более 10 часов на это, пытаясь использовать разные методы, и вы разрешаете его за все время, которое потребовалось вам, чтобы нажать «Добавить комментарий». Благодарю вас! –

Смежные вопросы