اذهب إلى المحتوى
  • 0

خطأ DatabaseError: current transaction is aborted في جانغو Django؟

Amer Abdallah

السؤال

أحصل على رسالة الخطأ التالية:

"DatabaseError: current transaction is aborted, commands ignored until end of transaction block"

كان الكود يعمل بشكل سليم إلى قمت بتحديث حزمة python-psycopg إلى python-psycopg2، بالرغم من عدم تغير أي شيء في الكود. ما سبب هذه المشكلة وكيف أقوم بحلها في جانغو Django؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

هذا الخطأ سحدث في قواعد بيانات postgres وينتج عن استعلام خاطيء ومحاولة تشغيل استعلام آخر دون التراجع عن المعاملة أولاً rolling back. (قد تفكر في الأمر على أنه ميزة أمان ، لمنعك من إتلاف بياناتك)

لإصلاح ذلك، سترغب في معرفة مكان تنفيذ هذا الاستعلام الخاطيء في الكود. قد يكون من المفيد استخدام خياري log_statement و log_min_error_statement في خادم postgresql، لمعرفة الإستعلامات التي يتم تنفيذها.

بعد إصلاح الكود ستحتاج إلى عمل rolling back من خلال الكود التالي:

from django.db import transaction, DatabaseError
try:
    a.save()
except DatabaseError:
    transaction.rollback()

الكود السابق مساوي لجملة ROLLBACK في SQL، يمكنك معرفة المزيد عن هذا الأمر من خلال موسوعة حسوب من هنا (الأمر ROLLBACK)

أيضًا قد يكون سبب الخطأ هو عدم مزامنة قاعدة البيانات، ولحل هذا الأمر يمكنك أن تستخدم الأمر syncdb (والذي يأتي مضمنًا في Django)، كالتالي:

python3 manage.py syncdb

بعد ذلك يمكنك عمل تهجير للبيانات مرة أخرى للتأكد من إصلاح الخطأ، كالتالي:

python3 manage.py migrate

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

تماماً كما أوضح سامح. وفي Flask أو أي مكان تستخدم فيه psycopg2 تحتاج فقط إلى التعليمات التالية وسينجح الأمر غالباً:

curs = conn.cursor()
curs.execute("ROLLBACK")
conn.commit()

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...