الاستعلامات على MySQL من Python التي تنتج بيانات متطابقة
يشكل الاستعلام المتكرر عن قاعدة بيانات MySQL من Python لاسترداد البيانات الديناميكية تحديًا. من المعروف أن مجرد التكرار من خلال استعلام في حلقة لا يكفي لجلب بيانات جديدة من قاعدة البيانات.
رمزك المقدم يوضح هذه المشكلة:
for i in range(listSize):
#...
mycursor = mydb.cursor(dictionary=True)
mycursor.execute(sql)
#...
حتى مع المحاولات التي تستخدم fetchall، وfetchmany، وfetchone، تظل النتائج راكدة.
الحل: إجراء الاتصال
لحل هذه المشكلة، يجب أن يتبع كل تنفيذ استعلام التزام بالاتصال. ينهي هذا الإجراء المعاملة الجارية ويبدأ معاملة جديدة، مما يمكّن الاستعلام اللاحق من اكتشاف التعديلات التي تم إجراؤها أثناء المعاملة السابقة.
while True:
#...
mycursor = mydb.cursor(dictionary=True)
mycursor.execute(sql)
#...
mydb.commit()
#...
مستويات العزل والقراءة الافتراضية القابلة للتكرار
هذا المفهوم متجذر في مستويات العزل. بشكل افتراضي، يستخدم MySQL القراءة المتكررة لـ InnoDB. وهذا يعني أنه ضمن المعاملة، ستحتفظ عمليات القراءة اللاحقة باللقطة التي أنشأتها القراءة الأولية للمعاملة. وبالتالي، بدون الالتزام، لن تلتقط الاستعلامات اللاحقة أي تعديلات.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3