قمت بكتابة دالة بايثون لتعديل بيانات ومعلومات مدخله في قاعدة البيانات
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")
قمت بكتابتها كما تفضلت
وخرج لي خطأ في نوع البيانات
TypeError: %d format: a number is required, not str
ربما لأن تخصيص الحقل في قاعدة البيانات varchar وليس رقم
نعم صحيح
لكن يبقى خطأ النص
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_unicode_ci
وهناك دوال أخرى مثل الإضافة والحذف تعمل بشكل جيد في البرنامج
فقط هذه الدالة (دالة التعديل) هي التي لا تقوم بوظيفتها وتعطي Error
يعطيك العافية أستاذ وائل
ستجد على الرابط التالي كود البرنامج كاملاً مع الإضافات :
جزاك الله خيرا
لديك جسب عبارة الحشر 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"
لم نتمكن من تحديد الخلل!