Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.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
Python djnago pytest无法创建测试数据库_Python_Python 3.x_Django_Django Rest Framework - Fatal编程技术网

Python djnago pytest无法创建测试数据库

Python djnago pytest无法创建测试数据库,python,python-3.x,django,django-rest-framework,Python,Python 3.x,Django,Django Rest Framework,我正在集成django pytest并为其编写第一个测试用例,但在运行pytest时,它开始创建测试数据库,并在仅创建5个表之后抛出错误“无法添加外键约束”。 下面是stacktrace query = b'ALTER TABLE `tracking_invoiceview` ADD CONSTRAINT `tracking_invoiceview_invoice_id_95b70617_fk_backend_invoices_id` FOREIGN KEY (`invoice_id`) REF

我正在集成django pytest并为其编写第一个测试用例,但在运行pytest时,它开始创建测试数据库,并在仅创建5个表之后抛出错误“无法添加外键约束”。 下面是stacktrace

query = b'ALTER TABLE `tracking_invoiceview` ADD CONSTRAINT `tracking_invoiceview_invoice_id_95b70617_fk_backend_invoices_id` FOREIGN KEY (`invoice_id`) REFERENCES `backend_invoices` (`id`)'

    def query(self, query):
        # Since _mysql releases GIL while querying, we need immutable buffer.
        if isinstance(query, bytearray):
            query = bytes(query)
        if self.waiter is not None:
            self.send_query(query)
            self.waiter(self.fileno())
            self.read_query_result()
        else:
>           _mysql.connection.query(self, query)
E           _mysql_exceptions.IntegrityError: (1215, 'Cannot add foreign key constraint')

cheetah_env/lib/python3.6/site-packages/MySQLdb/connections.py:276: IntegrityError

The above exception was the direct cause of the following exception:

request = <SubRequest '_django_db_marker' for <Function test_login>>

    @pytest.fixture(autouse=True)
    def _django_db_marker(request):
        """Implement the django_db marker, internal to pytest-django.
    
        This will dynamically request the ``db``, ``transactional_db`` or
        ``django_db_reset_sequences`` fixtures as required by the django_db marker.
        """
        marker = request.node.get_closest_marker("django_db")
        if marker:
            transaction, reset_sequences = validate_django_db(marker)
            if reset_sequences:
                request.getfixturevalue("django_db_reset_sequences")
            elif transaction:
                request.getfixturevalue("transactional_db")
            else:
>               request.getfixturevalue("db")

cheetah_env/lib/python3.6/site-packages/pytest_django/plugin.py:513: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
cheetah_env/lib/python3.6/site-packages/pytest_django/fixtures.py:108: in django_db_setup
    **setup_databases_args
cheetah_env/lib/python3.6/site-packages/django/test/utils.py:174: in setup_databases
    serialize=connection.settings_dict.get('TEST', {}).get('SERIALIZE', True),
cheetah_env/lib/python3.6/site-packages/django/db/backends/base/creation.py:68: in create_test_db
    run_syncdb=True,
cheetah_env/lib/python3.6/site-packages/django/core/management/__init__.py:148: in call_command
    return command.execute(*args, **defaults)
cheetah_env/lib/python3.6/site-packages/django/core/management/base.py:353: in execute
    output = self.handle(*args, **options)
cheetah_env/lib/python3.6/site-packages/django/core/management/base.py:83: in wrapped
    res = handle_func(*args, **kwargs)
cheetah_env/lib/python3.6/site-packages/django/core/management/commands/migrate.py:172: in handle
    self.sync_apps(connection, executor.loader.unmigrated_apps)
cheetah_env/lib/python3.6/site-packages/django/core/management/commands/migrate.py:310: in sync_apps
    self.stdout.write("    Running deferred SQL...\n")
cheetah_env/lib/python3.6/site-packages/django/db/backends/base/schema.py:106: in __exit__
    self.execute(sql)
cheetah_env/lib/python3.6/site-packages/django/db/backends/base/schema.py:133: in execute
    cursor.execute(sql, params)
cheetah_env/lib/python3.6/site-packages/django/db/backends/utils.py:68: in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
cheetah_env/lib/python3.6/site-packages/django/db/backends/utils.py:77: in _execute_with_wrappers
    return executor(sql, params, many, context)
cheetah_env/lib/python3.6/site-packages/django/db/backends/utils.py:85: in _execute
    return self.cursor.execute(sql, params)
cheetah_env/lib/python3.6/site-packages/django/db/utils.py:89: in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
cheetah_env/lib/python3.6/site-packages/django/db/backends/utils.py:85: in _execute
    return self.cursor.execute(sql, params)
cheetah_env/lib/python3.6/site-packages/django/db/backends/mysql/base.py:71: in execute
    return self.cursor.execute(query, args)
cheetah_env/lib/python3.6/site-packages/MySQLdb/cursors.py:250: in execute
    self.errorhandler(self, exc, value)
cheetah_env/lib/python3.6/site-packages/MySQLdb/connections.py:50: in defaulterrorhandler
    raise errorvalue
cheetah_env/lib/python3.6/site-packages/MySQLdb/cursors.py:247: in execute
    res = self._query(query)
cheetah_env/lib/python3.6/site-packages/MySQLdb/cursors.py:412: in _query
    rowcount = self._do_query(q)
cheetah_env/lib/python3.6/site-packages/MySQLdb/cursors.py:375: in _do_query
    db.query(q)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_mysql.connection open to 'localhost' at 34e6918>
query = b'ALTER TABLE `tracking_invoiceview` ADD CONSTRAINT `tracking_invoiceview_invoice_id_95b70617_fk_backend_invoices_id` FOREIGN KEY (`invoice_id`) REFERENCES `backend_invoices` (`id`)'

    def query(self, query):
        # Since _mysql releases GIL while querying, we need immutable buffer.
        if isinstance(query, bytearray):
            query = bytes(query)
        if self.waiter is not None:
            self.send_query(query)
            self.waiter(self.fileno())
            self.read_query_result()
        else:
>           _mysql.connection.query(self, query)
E           django.db.utils.IntegrityError: (1215, 'Cannot add foreign key constraint')

cheetah_env/lib/python3.6/site-packages/MySQLdb/connections.py:276: IntegrityError
---------------------------- Captured stderr setup -----------------------------
Got an error creating the test database: (1007, "Can't create database 'test_izenda_app_by_migrate'; database exists")
--------------- generated xml file: /tmp/tmp-6908YWZwoNZB5NF.xml ---------------
=========================== short test summary info ============================
ERROR tests/test_accounts.py::test_login - django.db.utils.IntegrityError: (1...
=============================== 1 error in 9.35s ===============================
query=b'ALTER TABLE`tracking\u invoiceview`ADD CONSTRAINT`tracking\u invoiceview\u invoice\u id\u 95b70617\u fk\u backend\u invoices\u id`外键(`invoice\u id`)引用`backend\u invoices`(`id`)`
def查询(自我,查询):
#由于mysql在查询时会释放GIL,所以我们需要不可变的缓冲区。
如果isinstance(查询,bytearray):
查询=字节(查询)
如果self.water不是None:
self.send\u查询(查询)
self.water(self.fileno())
self.read\u query\u result()
其他:
>\u mysql.connection.query(self,query)
E_mysql_exceptions.IntegrityError:(1215,“无法添加外键约束”)
cheetah_env/lib/python3.6/site packages/MySQLdb/connections.py:276:IntegrityError
上述异常是以下异常的直接原因:
请求=
@pytest.fixture(autouse=True)
def_django_db_标记(请求):
“”“实现django_db标记,pytest django内部。
这将动态请求``db``、`transactional\`u db``或
``django_db_重置_序列`` django_db标记所需的装置。
"""
marker=request.node.get_closest_标记(“django_db”)
如果标记:
事务,重置\u序列=验证\u django\u数据库(标记)
如果重置\u序列:
getfixturevalue(“django\u db\u reset\u序列”)
elif交易:
请求.getfixturevalue(“事务性数据库”)
其他:
>请求。getfixturevalue(“db”)
cheetah_env/lib/python3.6/site packages/pytest_django/plugin.py:513:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
cheetah_env/lib/python3.6/site packages/pytest_django/fixtures.py:108:in django_db_设置
**设置\u数据库\u参数
cheetah_env/lib/python3.6/site packages/django/test/utils.py:174:in setup_数据库
serialize=connection.settings\u dict.get('TEST',{}).get('serialize',True),
cheetah_env/lib/python3.6/site packages/django/db/backends/base/creation.py:68:in create_test_db
运行\u syncdb=True,
cheetah_env/lib/python3.6/site-packages/django/core/management/__-init__;.py:148:in-call_命令
return命令。execute(*args,**默认值)
cheetah_env/lib/python3.6/site packages/django/core/management/base.py:353:in-execute
输出=self.handle(*args,**选项)
cheetah_env/lib/python3.6/site packages/django/core/management/base.py:83:in-wrapped
res=句柄函数(*args,**kwargs)
cheetah_env/lib/python3.6/site packages/django/core/management/commands/migrate.py:172:in-handle
self.sync_应用程序(连接、执行器、加载器、未整合的_应用程序)
cheetah_env/lib/python3.6/site packages/django/core/management/commands/migrate.py:310:in-sync_应用程序
self.stdout.write(“运行延迟SQL…\n”)
cheetah_env/lib/python3.6/site packages/django/db/backends/base/schema.py:106:in__退出__
self.execute(sql)
cheetah_env/lib/python3.6/site packages/django/db/backends/base/schema.py:133:in-execute
cursor.execute(sql,params)
cheetah_env/lib/python3.6/site packages/django/db/backends/utils.py:68:in-execute
返回self.\u使用包装器执行(sql,params,many=False,executor=self.\u execute)
cheetah_env/lib/python3.6/site packages/django/db/backends/utils.py:77:in_execute_with_wrappers
返回执行器(sql、参数、多个、上下文)
cheetah_env/lib/python3.6/site packages/django/db/backends/utils.py:85:in_execute
返回self.cursor.execute(sql,params)
cheetah_env/lib/python3.6/site packages/django/db/utils.py:89:in__退出__
使用exc_值的_回溯(回溯)提高dj_exc_值
cheetah_env/lib/python3.6/site packages/django/db/backends/utils.py:85:in_execute
返回self.cursor.execute(sql,params)
cheetah_env/lib/python3.6/site packages/django/db/backends/mysql/base.py:71:in-execute
返回self.cursor.execute(查询,参数)
cheetah_env/lib/python3.6/site packages/MySQLdb/cursors.py:250:in-execute
errorhandler(self、exc、value)
cheetah_env/lib/python3.6/site packages/MySQLdb/connections.py:50:in defaulterrorhandler
提高错误值
cheetah_env/lib/python3.6/site-packages/MySQLdb/cursors.py:247:in-execute
res=自我查询(查询)
cheetah_env/lib/python3.6/site packages/MySQLdb/cursors.py:412:in\u查询
rowcount=self.\u do\u查询(q)
cheetah_env/lib/python3.6/site packages/MySQLdb/cursors.py:375:in_do_query
数据库查询(q)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
自我=
query=b'ALTER TABLE`tracking\u invoiceview`ADD CONSTRAINT`tracking\u invoiceview\u invoice\u id\u 95b70617\u fk\u backend\u invoices\u id`外键(`invoice\u id`)引用`backend\u invoices`(`id`)'
def查询(自我,查询):
#由于mysql在查询时会释放GIL,所以我们需要不可变的缓冲区。
如果isinstance(查询,bytearray):
查询=字节(查询)
如果self.water不是None:
self.send\u查询(查询)
self.water(self.fileno())
self.read\u query\u result()
其他:
>\u mysql.connection.query(self,query)
E django.db.utils.IntegrityError:(1215,“无法添加外键约束”)
cheetah_env/lib/python3.6/site packages/MySQLdb/connections.py:276:IntegrityError
----------------------------捕获的stderr设置-----------------------------
创建测试数据库时出错:(1007,“无法创建数据库'test_izenda_app_by_migrate';数据库存在”)
---------------生成的xml文件:/tmp/tmp-6908YWZwoNZB5NF.xml---------------
==============================================短测试摘要信息============================
错误测试/test\u accounts.py::test\u登录-django.db.utils.IntegrityError:(1。。。
=