Python Django错误有时会发生
我现在很困惑。我在Django中运行一个脚本来创建一个假的数据库,一遍又一遍地循环使用相同的代码。当我遇到以下错误时,我已经创建了超过2.5k个对象:Python Django错误有时会发生,python,django,error-handling,Python,Django,Error Handling,我现在很困惑。我在Django中运行一个脚本来创建一个假的数据库,一遍又一遍地循环使用相同的代码。当我遇到以下错误时,我已经创建了超过2.5k个对象: ProgrammingError: autocommit cannot be used inside a transaction 我查了一下,发现了一个bug,显然已经修复了,但这是针对previos版本的,我使用的是Django 1.6。以下是完整的回溯: -------------------------------------------
ProgrammingError: autocommit cannot be used inside a transaction
我查了一下,发现了一个bug,显然已经修复了,但这是针对previos版本的,我使用的是Django 1.6。以下是完整的回溯:
---------------------------------------------------------------------------
ProgrammingError Traceback (most recent call last)
<ipython-input-31-0597bce30f92> in <module>()
----> 1 make_listeners()
<ipython-input-29-5697f122e144> in make_listeners()
28 seed = random.randint(0,len(user_ids_copy)-1)
29 requested_user = user_ids_copy.pop(seed)
---> 30 user.functions.listen_to(requested_user)
31 print i, user.pk, number_seed, original_seed
32 number_seed -= 1
.../models.py in listen_to(self, user_id)
715 except User.DoesNotExist:
716 return 'User DoesNotExist'
--> 717 request = ListenerRequest.objects.get_or_create(user=requesting, user_requested=requester, is_active=True)
718 if not request[1]:
719 if request.is_accepted:
/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/models/manager.pyc in get_or_create(self, **kwargs)
152
153 def get_or_create(self, **kwargs):
--> 154 return self.get_queryset().get_or_create(**kwargs)
155
156 def create(self, **kwargs):
/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/models/query.pyc in get_or_create(self, **kwargs)
378 obj = self.model(**params)
379 with transaction.atomic(using=self.db):
--> 380 obj.save(force_insert=True, using=self.db)
381 return obj, True
382 except DatabaseError:
/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/transaction.pyc in __exit__(self, exc_type, exc_value, traceback)
328 connection.autocommit = True
329 else:
--> 330 connection.set_autocommit(True)
331 # Outermost block exit when autocommit was disabled.
332 elif not connection.savepoint_ids and not connection.commit_on_exit:
/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/backends/__init__.pyc in set_autocommit(self, autocommit)
331 self.validate_no_atomic_block()
332 self.ensure_connection()
--> 333 self._set_autocommit(autocommit)
334 self.autocommit = autocommit
335
/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/backends/postgresql_psycopg2/base.pyc in _set_autocommit(self, autocommit)
171 def _set_autocommit(self, autocommit):
172 if self.psycopg2_version >= (2, 4, 2):
--> 173 self.connection.autocommit = autocommit
174 else:
175 if autocommit:
ProgrammingError: autocommit cannot be used inside a transaction
在尝试创建假数据库之前,请尝试以下操作:
from django.db import connection
curs = connection.cursor()
curs.execute('SET autocommit = 1')
如果您使用的是django_postgrespool,则当前版本(在编写时)正在吞咽错误并返回一般错误“ProgrammingError:autocommit不能在事务中使用” 您可以通过临时注释settings.py中的以下行来查看实际错误
DATABASES['default']['ENGINE'] = 'django_postgrespool'
有关更多详细信息,请参阅本期公开发行的刊物:请参阅。Django 1.3
和python-psycopg2.4.2(oneiric版本)
之间存在不兼容。建议的解决方法是使用以前版本的python-psycopg2
或更新到django
trunk,因为这不会出现在下一个单点版本中,而且AFAICT
还没有1.4版本
尝试以下操作:
sudo pip install psycopg2==2.4.1
您的数据库及其版本是什么?在models.py中查看代码会很有帮助。似乎get_或_create()
试图在修改其他对象时创建对象?@Rohan我给了你相关的模型(完整的文件大约有1200行代码,所以我不会发布),看起来你正在事务中运行这个,而django.db.transaction.Atomic中还有另一个bug。u exit_u()。您是否设置了settings.ATOMIC_请求,或者您是否以任何其他方式使用事务?我遇到了有时会发生的相同错误。你找到原因了吗?你使用像django postgrespool这样的应用程序吗?
DATABASES['default']['ENGINE'] = 'django_postgrespool'