مشكلة في دالة بايثون لتعديل المعلومات في قاعدة البيانات

قمت بكتابة دالة بايثون لتعديل بيانات ومعلومات مدخله في قاعدة البيانات

def update(self):
        con = pymysql.connect(
            host = 'localhost',
            user = 'root',
            password = '',
            database = 'employ')
        cur = con.cursor()
        cur.execute("update employees set family_members=%s, social_status=%s, gender=%s, date_birth=%s, id_number=%s, mail=%s, name=%s where id=%s",(
                    self.family_members_var.get(),
                    self.social_status_var.get(),
                    self.gender_var.get(),
                    self.date_birth_var.get(),
                    self.id_number_var.get(),
                    self.mail_var.get(),
                    self.name_var.get(),
                    self.id_var.get()
                    ))
        con.commit()
        self.fetch_all()
        self.clear()
        con.close()

وخرج لي الخطأ التالي :

pymysql.err.ProgrammingError: (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 ')' at line 1")

أرجو المساعدة

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

حاول إضافة اقتباس مفرد حول 's%' عند المتغيرات النصية في الاستعلام لديك مثل

name='%s'
mail='%s'

وغيرهم، لست متأكد من الحقول النصية لديك،

وفي حال كتبت الاستعلام على أكثر من سطر استخدم الاقتباس الثلاثي:

x = """
    سلسلة نصية
    على أكثر من
    سطر
"""

حياك الله

قمت بالتعديل على الدالة بإضافة اقتباس مفرد عند المتغيرات النصية

def update(self):
        con = pymysql.connect(
            host = 'localhost',
            user = 'root',
            password = '',
            database = 'employ')
        cur = con.cursor()
        cur.execute("update employees set family_members='%s', social_status='%s', gender='%s', date_birth='%s', id_number='%s', mail='%s', name='%s' where id='%s'",(
                    self.family_members_var.get(),
                    self.social_status_var.get(),
                    self.gender_var.get(),
                    self.date_birth_var.get(),
                    self.id_number_var.get(),
                    self.mail_var.get(),
                    self.name_var.get(),
                    self.id_var.get()
                    ))
        con.commit()
        self.fetch_all()
        self.clear()
        con.close()
      

وخرج لي التالي :

pymysql.err.ProgrammingError: (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 '2'', social_status=''�����'', gender=''����'', date_birth=''24/02/1985'' at line 1")

حاول تجنب الاقنتباس عند القيم الرقمية

where id='%s'
id_number='%s'

ونضع d بدل s أي d%

لنضع d بدل s في القيم الرقمية

where id=%d
id_number=%d

وبدون اقتباس

قمت بكتابتها كما تفضلت

وخرج لي خطأ في نوع البيانات

TypeError: %d format: a number is required, not str

ربما لأن تخصيص الحقل في قاعدة البيانات varchar وليس رقم

حسنا، هي نص s%

نعم صحيح

لكن يبقى خطأ النص

pymysql.err.ProgrammingError: (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 '����'', gender=''���'', date_birth=''164165'', id_number='545151956', mai' at line 1")

ربما نحتاج مراجعة دليل مكتبة pymysql الذي يتوافق مع خادم MySQL

ربما حاليا لاتدعم اللغة العربية؟ تأكد من تفعيل utf8 في كل من قاعدة البيانات و المخدم و صفحة الويب

مفعله في قاعدة البيانات utf8_unicode_ci

وهناك دوال أخرى مثل الإضافة والحذف تعمل بشكل جيد في البرنامج

فقط هذه الدالة (دالة التعديل) هي التي لا تقوم بوظيفتها وتعطي Error

أرجو إرفاق دالة إضافة البيانات من فضلك insert

يعطيك العافية أستاذ وائل

ستجد على الرابط التالي كود البرنامج كاملاً مع الإضافات :

جزاك الله خيرا

لديك جسب عبارة الحشر insert جميع البيانات نصية واستعملت معها s%

جرب:

"update employees set family_members='%s', social_status='%s', gender='%s', date_birth='%s', id_number='%s', mail='%s', name='%s' where id='%s'"

هذه جربناها

يعمل البرنامج طبيعي ولكن لا تعمل داله التعديل وتعطي الخطأ التالي :

pymysql.err.ProgrammingError: (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 '0'', social_status=''����'', gender=''���'', date_birth=''164165'', id_nu' at line 1"

لم نتمكن من تحديد الخلل!