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