Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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要求我创建一个mysql数据库来运行测试?_Django - Fatal编程技术网

为什么django要求我创建一个mysql数据库来运行测试?

为什么django要求我创建一个mysql数据库来运行测试?,django,Django,使用sqlite for django时,您可以从源代码管理中签出应用程序并运行单元测试,而无需执行任何特殊操作。但是,当您突然切换到使用mysql作为数据库时,您需要创建一个数据库。我为什么要这样做?这尤其奇怪,因为单元测试甚至不使用该数据库,而是通过在名称前加上“test_u2;”来创建自己的数据库。这是因为Django加载settings.py文件以运行测试套件。您可以创建一个单独的settings.py文件,并在运行测试时使用它。以django网站为例: --settings=test_

使用sqlite for django时,您可以从源代码管理中签出应用程序并运行单元测试,而无需执行任何特殊操作。但是,当您突然切换到使用mysql作为数据库时,您需要创建一个数据库。我为什么要这样做?这尤其奇怪,因为单元测试甚至不使用该数据库,而是通过在名称前加上“test_u2;”来创建自己的数据库。

这是因为Django加载settings.py文件以运行测试套件。您可以创建一个单独的settings.py文件,并在运行测试时使用它。以django网站为例:

--settings=test_sqlite
假设您有一个名为test_sqlite的settings.py文件

请点击此处了解更多信息:


如果您经常运行测试,请在settings.py中输入以下代码:

import sys

if 'test' in sys.argv:
    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'test'
    }
}

我在测试中使用了几乎相同的解决方案,比如@Simon Bächler,但不是真正的数据库

'NAME': 'test', 
我用

'NAME':' :memory:,

所以它使用内存来处理测试操作,这就是为什么它不总是创建/更新/删除数据库。

我有一个单独的设置文件,我仍然想使用mysql而不是sqlite进行测试,因为数据库差异很大,我想针对我部署到的数据库引擎进行测试。你需要创建一个使用mysql和postgres的数据库。在sqllite中,当您要建立到db的连接时,如果它不存在,就会创建连接(“数据库”)。在单元测试期间,他们将在数据库中创建自己的表,一旦完成单元测试,他们应该拆下这些表。是的,我明白了,但问题是:为什么?这是数据库的一个功能,与Django无关。Sqlite是在不存在数据库的地方编写的,它将创建一个数据库。在postgres中,如果您试图连接到一个不存在的数据库,就会出现错误。在mysql中也是如此。这很奇怪,因为单元测试确实为mysql中的单元测试创建了一个数据库,但出于某种原因,它们仍然需要另一个没有实际用于测试的数据库。仍然没有解决问题,因为它测试的是sqlite,而我们部署的不是sqlite,因此不是一个好的测试。但是,如果数据库不存在,则修改settings.py或manage.py来创建它可能会起作用,这无关紧要。如果您使用的是纯django,DB后端可能会发生变化,您的站点应该可以正常工作。