python - 如何在Django中使用不同的数据库引擎进行测试和生产

标签 python mysql django sqlite django-testing

我是 Django 的新手。我在项目中有一个应用程序,它是通过测试驱动开发开发的。在生产环境中,我们使用 MySQL 作为数据库引擎,但如果我使用 MySQL 运行测试:

./manage test myapp

然后它会占用太多时间(2-4 分钟)来创建数据库,尽管测试速度非常快(大约一秒)。

如果我使用 SQLite,那么测试只需要几秒钟,这对我来说是完美的。但问题是我经常需要 MySQL 本地数据库的管理界面。

如何让 django 在 sqlite 上运行测试并使用 mysql 启动 runserver?

现在我在 settings/local.py 中使用这些设置,但我应该注释/取消注释行以更改数据库,具体取决于我目前所做的事件。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',  # Use for testing
        'NAME': 'databasename.db3',
        # 'ENGINE': 'django.db.backends.mysql',  # Use if need admin on localserver
        # 'NAME': 'databasename',              
        'USER': 'myuser',                      # Not used with sqlite3.
        'PASSWORD': 'somepassword',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
        'TEST_CHARSET': "utf8",         #option to make tesing database with utf8
        'TEST_COLLATION': "utf8_general_ci",
    }
}

最佳答案

一种选择是检查 sys.argv对于 settings.py 中的 test 参数:

if 'test' in sys.argv:
    DATABASES['default']['ENGINE'] = 'django.db.backends.sqlite3'
    DATABASES['default']['NAME'] = 'databasename.db3'

不过,作为旁注:严格来说,为测试和开发/阶段/生产使用不同的数据库后端并不是一个好主意。你可能会遇到 database-specific “特殊”情况,可能会花费您大量时间和头痛。

关于python - 如何在Django中使用不同的数据库引擎进行测试和生产,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23914733/

相关文章:

python - Django Haystack SOLR 中的排序顺序

python - Tkinter 类方法和访问类成员

php - 如何使用php从数据库中提取日期

php pdo用数据库中的数组填充表格

mysql - 不同表格上的多个计数 - 帮助我更熟练

python - 检查 TreeView 的特征堆栈?

python - python shell中的默认函数

python - django 用户中的多个登录字段

javascript - Django/Jquery PreventDefault 仅适用于 for 循环的第一项

Django non-rel - 如何在模型中使用 EmbeddedModelField 创建表单?