سؤال

أحاول الحصول على بيان تحديث MySQL هذا صحيح (مع المتغيرات):

cursor.execute ("UPDATE tblTableName SET Year=%s" % Year ", Month=%s" % Month ", Day=%s" % Day ", Hour=%s" % Hour ", Minute=%s" Minute "WHERE Server=%s " % ServerID)   

أي أفكار حيث أنا ذاهب خطأ؟

هل كانت مفيدة؟

المحلول

هو - هي يجب ان يكون:

cursor.execute ("""
   UPDATE tblTableName
   SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s
   WHERE Server=%s
""", (Year, Month, Day, Hour, Minute, ServerID))

تستطيع ايضا تفعل ذلك مع التلاعب السلسلة الأساسية،

cursor.execute ("UPDATE tblTableName SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s WHERE Server='%s' " % (Year, Month, Day, Hour, Minute, ServerID))

لكن هذه الطريقة تثبط لأنها تترك لك فتح حقن SQL. وبعد لأنها سهلة للغاية (ومماثلة) للقيام بذلك طريق صحيحتيم. وبعد افعل ذلك بشكل صحيح.

الشيء الوحيد الذي يجب أن تكون حذرا، هو أن بعض قاعدة البيانات تسترجع لا تتبع نفس الاتفاقية لاستبدال السلسلة (SQLite يتبادر إلى الذهن).

نصائح أخرى

لقد حصلت على بناء الجملة خطأ:

cursor.execute ("""
   UPDATE tblTableName
   SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s
   WHERE Server=%s
""", (Year, Month, Day, Hour, Minute, ServerID))

للمزيد من، اقرأ الوثائق.

هنا هي الطريقة الصحيحة:

import MySQLdb

if __name__ == '__main__':
    connect = MySQLdb.connect(host="localhost", port=3306,
                              user="xxx", passwd="xxx", db='xxx', charset='utf8')

    cursor = connect.cursor()

    cursor.execute("""
       UPDATE tblTableName
       SET Year=%s, Month=%s, Day=%s, Hour=%s, Minute=%s
       WHERE Server=%s
    """, (Year, Month, Day, Hour, Minute, ServerID))

    connect.commit()
    connect.close()

PS لا تنسى connect.commit(), ، أو لن يعمل

لا أحد منهم يعمل بالنسبة لي لسبب ما.

أحسب ذلك أنه لسبب ما لا يقرأ بيثون٪ S. لذلك استخدم (؟) بدلا من٪ s في رمز SQL.

وأخيرا هذا عملت بالنسبة لي.

   cursor.execute ("update tablename set columnName = (?) where ID = (?) ",("test4","4"))
   connect.commit()

@ esteban küber صحيح تماما.

ربما تلميح إضافي واحد للمبتدئين الدموي مثلي. اذا أنت speciify المتغيرات مع٪ s, ، عليك أن تتبع هذا المبدألكل قيمة إدخال, ، والتي تعني المتغيرات المحددة وكذلك المتغيرات حيث.

خلاف ذلك، سوف تضطر إلى مواجهة رسالة إنهاء مثللديك خطأ في بناء جملة SQL الخاص بك؛ حدد الدليل الذي يتوافق مع إصدار خادم MySQL الخاص بك للحصول على بناء الجملة الصحيح لاستخدامه بالقرب من "٪ S حيث"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top