django.db.utils.DatabaseError - PullRequest
       2

django.db.utils.DatabaseError

5 голосов
/ 26 декабря 2010

Я настраиваю модель django для хранения регионов, таких как США, Германия и т. Д. Я сделал имя региона уникальным для таблицы. У меня есть сценарий, который заполняет базу данных из списка, и если есть повторяющееся имя региона, IntegrityError генерируется, как ожидалось, но затем происходит другая ошибка, и я не могу сказать, почему из сообщения об ошибке. Есть идеи? Спасибо!

django.db.utils.DatabaseError: current transaction is aborted, commands ignored until end of transaction block

Модель:

class Region(models.Model):
    name = models.CharField(max_length=512, unique=True)

    def __unicode__(self):
        return self.name

Заполните код:

    try:
        Region(name=server['locale']).save()
        print 'Added region: %(locale)s' % server
    except IntegrityError:
        pass

Я подтвердил, что произошла ошибка IntegrityError, но затем я получаю эту ошибку, которую я не ожидаю:

  File "/home/daedalus/webapps/wowstatus/lib/python2.6/django/db/models/base.py", line 456, in save
    self.save_base(using=using, force_insert=force_insert, force_update=force_update)
  File "/home/daedalus/webapps/wowstatus/lib/python2.6/django/db/models/base.py", line 549, in save_base
    result = manager._insert(values, return_id=update_pk, using=using)
  File "/home/daedalus/webapps/wowstatus/lib/python2.6/django/db/models/manager.py", line 195, in _insert
    return insert_query(self.model, values, **kwargs)
  File "/home/daedalus/webapps/wowstatus/lib/python2.6/django/db/models/query.py", line 1518, in insert_query
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/home/daedalus/webapps/wowstatus/lib/python2.6/django/db/models/sql/compiler.py", line 788, in execute_sql
    cursor = super(SQLInsertCompiler, self).execute_sql(None)
  File "/home/daedalus/webapps/wowstatus/lib/python2.6/django/db/models/sql/compiler.py", line 732, in execute_sql
    cursor.execute(sql, params)
  File "/home/daedalus/webapps/wowstatus/lib/python2.6/django/db/backends/util.py", line 15, in execute
    return self.cursor.execute(sql, params)
  File "/home/daedalus/webapps/wowstatus/lib/python2.6/django/db/backends/postgresql_psycopg2/base.py", line 44, in execute
    return self.cursor.execute(query, args)
django.db.utils.DatabaseError: current transaction is aborted, commands ignored until end of transaction block

Ответы [ 2 ]

12 голосов
/ 24 февраля 2011

Вам следует сбросить состояние БД, если что-то не получается, например:

from django.db import transaction

@transaction.commit_manually
def Populate():
    try:
        Region(name=server['locale']).save()
        print 'Added region: %(locale)s' % server
    except IntegrityError:
        transaction.rollback()
    else:
        transaction.commit()
3 голосов
/ 24 июля 2012

Иногда я получаю эту ошибку при доступе к базе данных из оболочки django.Я исправляю это, закрывая соединение:

from django.db import connection
connection.close()
cur = connection.cursor()
sql = 'select distinct category from uploads_document'
cur.execute(sql)

после того, как я сделал ошибку вроде «select ditsinct ..»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...