Python django.db.utils.DatabaseError
我正在建立一个django模型来存储区域,如美国、德国等。我使区域名称在表中是唯一的。我有一个从列表填充数据库的脚本,如果存在重复的区域名IntegrityError,则会按预期抛出,但随后会发生另一个错误,我无法从错误消息中看出原因。有什么想法吗?谢谢Python django.db.utils.DatabaseError,python,django,Python,Django,我正在建立一个django模型来存储区域,如美国、德国等。我使区域名称在表中是唯一的。我有一个从列表填充数据库的脚本,如果存在重复的区域名IntegrityError,则会按预期抛出,但随后会发生另一个错误,我无法从错误消息中看出原因。有什么想法吗?谢谢 django.db.utils.DatabaseError: current transaction is aborted, commands ignored until end of transaction block 型号: class
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
如果出现故障,应重置数据库状态 例如:
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()
从django shell访问数据库时,有时会出现此错误。我通过关闭连接来修复它:
from django.db import connection
connection.close()
cur = connection.cursor()
sql = 'select distinct category from uploads_document'
cur.execute(sql)
在我犯了类似“选择编辑…”的错误后,它帮助我修复了一个问题。只是一个小技巧:我必须在呈现模板后提交/回滚事务。