Django 2.2升级版+;事务管理错误+;在测试执行期间
我们正在将django应用程序从版本1.11升级到版本2.2,并且我们几乎完成了必要的升级,当我们运行测试用例时,我们得到了如下错误: django.db.transaction.TransactionManagementError:中发生错误 当前事务。在结束之前,您无法执行查询 “原子”块 我们能够在django 1.11中运行相同的测试用例 即使我在下面运行django 2.2版本的简单测试用例,也会出现上面提到的错误,甚至不会从setup方法中打印“hello”语句 我们正在使用的库有pytest4.4、pytest-django-3.4.5、django 2.2和djangorestframework3.11 我做了更多的研究,但无法找到解决方案,请告知Django 2.2升级版+;事务管理错误+;在测试执行期间,django,django-rest-framework,Django,Django Rest Framework,我们正在将django应用程序从版本1.11升级到版本2.2,并且我们几乎完成了必要的升级,当我们运行测试用例时,我们得到了如下错误: django.db.transaction.TransactionManagementError:中发生错误 当前事务。在结束之前,您无法执行查询 “原子”块 我们能够在django 1.11中运行相同的测试用例 即使我在下面运行django 2.2版本的简单测试用例,也会出现上面提到的错误,甚至不会从setup方法中打印“hello”语句 我们正在使用的库有p
from django.test import TestCase
import pytest
@pytest.mark.django_db
class GetValuesTestCase(TestCase):
def setUp(self):
print("hello")
def test_hello(self):
print("hhh")
self.assertTrue(True)
完成错误堆栈跟踪
> ======================================================== ERRORS ========================================================
> __________________________________ ERROR at setup of GetValuesTestCase.test_hello __________________________________
>
> request = <SubRequest '_django_setup_unittest' for <TestCaseFunction
> test_hello>> django_db_blocker =
> <pytest_django.plugin._DatabaseBlocker object at 0x7ff3c3007b50>
>
> @pytest.fixture(autouse=True, scope="class")
> def _django_setup_unittest(request, django_db_blocker):
> """Setup a django unittest, internal to pytest-django."""
> if django_settings_is_configured() and is_django_unittest(request):
> request.getfixturevalue("django_test_environment")
> > request.getfixturevalue("django_db_setup")
>
> ../usaenv2/lib/python3.7/site-packages/pytest_django/plugin.py:486:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../usaenv2/lib/python3.7/site-packages/pytest_django/fixtures.py:108:
> in django_db_setup
> **setup_databases_args ../usaenv2/lib/python3.7/site-packages/django/test/utils.py:174: in
> setup_databases
> serialize=connection.settings_dict.get('TEST', {}).get('SERIALIZE', True),
> ../usaenv2/lib/python3.7/site-packages/django/db/backends/base/creation.py:72:
> in create_test_db
> run_syncdb=True, ../usaenv2/lib/python3.7/site-packages/django/core/management/__init__.py:148:
> in call_command
> return command.execute(*args, **defaults) ../usaenv2/lib/python3.7/site-packages/django/core/management/base.py:364:
> in execute
> output = self.handle(*args, **options) ../usaenv2/lib/python3.7/site-packages/django/core/management/base.py:83:
> in wrapped
> res = handle_func(*args, **kwargs) ../usaenv2/lib/python3.7/site-packages/django/core/management/commands/migrate.py:234:
> in handle
> fake_initial=fake_initial, ../usaenv2/lib/python3.7/site-packages/django/db/migrations/executor.py:117:
> in migrate
> state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
> ../usaenv2/lib/python3.7/site-packages/django/db/migrations/executor.py:147:
> in _migrate_all_forwards
> state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
> ../usaenv2/lib/python3.7/site-packages/django/db/migrations/executor.py:246:
> in apply_migration
> self.record_migration(migration) ../usaenv2/lib/python3.7/site-packages/django/db/migrations/executor.py:261:
> in record_migration
> self.recorder.record_applied(migration.app_label, migration.name) ../usaenv2/lib/python3.7/site-packages/django/db/migrations/recorder.py:82:
> in record_applied
> self.ensure_schema() ../usaenv2/lib/python3.7/site-packages/django/db/migrations/recorder.py:62:
> in ensure_schema
> if self.has_table(): ../usaenv2/lib/python3.7/site-packages/django/db/migrations/recorder.py:56:
> in has_table
> return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
> ../usaenv2/lib/python3.7/site-packages/django/db/backends/base/introspection.py:48:
> in table_names
> return get_names(cursor) ../usaenv2/lib/python3.7/site-packages/django/db/backends/base/introspection.py:43:
> in get_names
> return sorted(ti.name for ti in self.get_table_list(cursor) ../usaenv2/lib/python3.7/site-packages/django/db/backends/postgresql/introspection.py:52:
> in get_table_list
> """.format('c.relispartition' if self.connection.features.supports_table_partitions else 'FALSE'))
> ../usaenv2/lib/python3.7/site-packages/ddtrace/contrib/dbapi/__init__.py:90:
> in execute
> return self._trace_method(self.__wrapped__.execute, self._self_datadog_name, query, {}, query, *args, **kwargs)
> ../usaenv2/lib/python3.7/site-packages/ddtrace/contrib/dbapi/__init__.py:44:
> in _trace_method
> return method(*args, **kwargs) ../usaenv2/lib/python3.7/site-packages/cacheops/transaction.py:99: in
> execute
> result = self._no_monkey.execute(self, sql, params) ../usaenv2/lib/python3.7/site-packages/django/db/backends/utils.py:67:
> in execute
> return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
> ../usaenv2/lib/python3.7/site-packages/django/db/backends/utils.py:76:
> in _execute_with_wrappers
> return executor(sql, params, many, context) ../usaenv2/lib/python3.7/site-packages/django/db/backends/utils.py:79:
> in _execute
> self.db.validate_no_broken_transaction()
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> self = <django.db.backends.postgresql.base.DatabaseWrapper object at
> 0x7ff3c4b140d0>
>
> def validate_no_broken_transaction(self):
> if self.needs_rollback:
> raise TransactionManagementError(
> > "An error occurred in the current transaction. You can't "
> "execute queries until the end of the 'atomic' block.") E django.db.transaction.TransactionManagementError:
> An error occurred in the current transaction. You can't execute
> queries until the end of the 'atomic' block.
>
> ../usaenv2/lib/python3.7/site-packages/django/db/backends/base/base.py:438:
> TransactionManagementError
===================================================================================================错误========================================================
>设置GetValuesTestCase.test时出错__________________________________
>
>请求=>django_db_拦截器=
>
>
>@pytest.fixture(autouse=True,scope=“class”)
>def(django)设置(unittest)(请求,django(db)阻塞器):
>“”“设置pytest django内部的django单元测试。”“”
>如果django\u设置是\u配置的(),并且是\u django\u单元测试(请求):
>getfixturevalue(“django_测试_环境”)
>>request.getfixturevalue(“django_db_setup”)
>
>../usaev2/lib/python3.7/site packages/pytest_django/plugin.py:486:
>“UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU3.7/现场包/pytest_django/fixtures.py:108:
>在django_db_设置中
>**设置\数据库\参数../usaev2/lib/python3.7/site packages/django/test/utils.py:174:in
>设置\u数据库
>serialize=connection.settings\u dict.get('TEST',{}).get('serialize',True),
>../usaev2/lib/python3.7/site packages/django/db/backends/base/creation.py:72:
>在创建测试数据库中
>运行\u syncdb=True,../usaev2/lib/python3.7/site packages/django/core/management/\uuuu init\uuuuu.py:148:
>in call_命令
>return命令.execute(*args,**默认值)../usaev2/lib/python3.7/site packages/django/core/management/base.py:364:
>执行中
>output=self.handle(*args,**options)…/usaev2/lib/python3.7/site packages/django/core/management/base.py:83:
>裹着
>res=handle_func(*args,**kwargs)../usaev2/lib/python3.7/site packages/django/core/management/commands/migrate.py:234:
>掌管
>fake_initial=fake_initial,../usaev2/lib/python3.7/site packages/django/db/migrations/executor.py:117:
>在迁移中
>状态=self.\u迁移\u所有\u转发(状态,计划,完整计划,假=假,假首字母=假首字母)
>../usaev2/lib/python3.7/site packages/django/db/migrations/executor.py:147:
>全部向前移动
>state=self.apply\u迁移(state,migration,false=false,false\u initial=false\u initial)
>../usaev2/lib/python3.7/site packages/django/db/migrations/executor.py:246:
>在应用程序中进行迁移
>self.record_migration(migration)…/usaev2/lib/python3.7/site packages/django/db/migrations/executor.py:261:
>记录内迁移
>self.recorder.record_applicated(migration.app_label,migration.name)…/usaev2/lib/python3.7/site packages/django/db/migrations/recorder.py:82:
>在记录中
>self.sure_schema()../usaev2/lib/python3.7/site packages/django/db/migrations/recorder.py:62:
>在模式中
>if self.has_table():../usaev2/lib/python3.7/site packages/django/db/migrations/recorder.py:56:
>在桌子上
>返回self.connection.introspection.table_名称(self.connection.cursor())中的self.Migration.meta.db_表
>../usaev2/lib/python3.7/site packages/django/db/backends/base/introspection.py:48:
>以表格形式列出
>返回get_name(cursor)…/usaev2/lib/python3.7/site packages/django/db/backends/base/introspection.py:43:
>以自己的名义
>返回排序(在self.get_table_列表(游标)中ti的ti.name)…/usaev2/lib/python3.7/site packages/django/db/backends/postgresql/introspection.py:52:
>在get_表_列表中
>“.”格式('c.relispation'如果self.connection.features.supports\u table\u partitions,则为'FALSE'))
>../usaev2/lib/python3.7/site-packages/ddtrace/contrib/dbapi/__-init__.py:90:
>执行中
>返回self.\u trace\u方法(self.\u wrapped\u.execute,self.\u self\u datadog\u name,query,{},query,*args,**kwargs)
>../usaev2/lib/python3.7/site-packages/ddtrace/contrib/dbapi/__-init__.py:44:
>in_跟踪法
>返回方法(*args,**kwargs)../usaev2/lib/python3.7/site packages/cacheops/transaction.py:99:in
>执行
>结果=self.\u no_monkey.execute(self、sql、params)…/usaev2/lib/python3.7/site packages/django/db/backends/utils.py:67:
>执行中
>返回self.\u使用包装器执行(sql,params,many=False,executor=self.\u execute)
>../usaev2/lib/python3.7/site packages/django/db/backends/utils.py:76:
>在_中使用_包装器执行
>返回执行器(sql,params,many,context)…/usaev2/lib/python3.7/site packages/django/db/backends/utils.py:79:
>在执行中
>self.db.validate\u no\u中断的\u事务()
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
>self=0x7ff3c4b140d0>
>
>def验证\u无\u已中断\u事务(自身):
>如果self.u需要回滚:
>引发事务管理错误(
>>“当前事务中发生错误。您不能”
>“执行查询直到“原子”块结束。”)E django.db.transaction.TransactionManagementError:
>当前事务中发生错误。您无法执行
>查询,直到“原子”块结束。
>
>../usaev2/lib/python3.7/site-packages/djan