Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 2.2升级版+;事务管理错误+;在测试执行期间_Django_Django Rest Framework - Fatal编程技术网

Django 2.2升级版+;事务管理错误+;在测试执行期间

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

我们正在将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

我做了更多的研究,但无法找到解决方案,请告知

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