KeyError:'ATOMIC_REQUESTS' when running DRF tests with mysqlclient installed

new9mtju  于 2023-04-28  发布在  Mysql
关注(0)|答案(1)|浏览(65)

我有一个DRF的功能测试套件。它使用@pytest.mark.django_db()访问SQL Server数据库。
我现在需要访问一个辅助MySQL DB,所以我安装了mysqlclient

在不更改任何源代码或django设置的情况下,单独安装这个包会破坏我的测试套件。

请注意,实际的mysqlclient似乎工作正常,并允许我访问辅助MySQL DB。
这是错误

django/core/handlers/base.py(348)make_view_atomic()
    def make_view_atomic(self, view):
        non_atomic_requests = getattr(view, "_non_atomic_requests", set())
        for alias, settings_dict in connections.settings.items():
>           if settings_dict["ATOMIC_REQUESTS"] and alias not in non_atomic_requests:
E           KeyError: 'ATOMIC_REQUESTS'

我试过使用这个:@pytest.mark.django_db(databases=["default"])将数据隔离到SQL Server数据库。没用的
我试过在设置中设置ATOMIC_REQUESTS,但它不粘。

DATABASES = {
    'default': {
        'ENGINE': 'mssql',
        'NAME': os.environ['DATABASE'],
        'USER': os.environ['USERNAME'],
        'PASSWORD': os.environ['PASSWORD'],
        'HOST': os.environ['SERVER_URL'],
        "ATOMIC_REQUESTS": True,
        'OPTIONS': {
            'driver': 'ODBC Driver 18 for SQL Server',
            'extra_params': "Encrypt=no" 
}}

在调试器中,它不会在设置中显示“ATOMIC_REQUESTS”。

ipdb> settings_dict
{'ENGINE': 'mssql', 'HOST': 'localhost', 'NAME': 'dev'}
goqiplq2

goqiplq21#

ATOMIC_REQUESTS设置不起作用,因为我忘记了我有 www.example.com 。把它加进去就行了。

@pytest.fixture(scope="session")
def django_db_setup():
    settings.DATABASES["default"] = {
        "Engine": "mssql",
        "ATOMIC_REQUESTS": True,
        "HOST": os.environ["SERVER_URL"],
        "NAME": os.environ["TEST_DATABASE"],
    }

相关问题