代码之家  ›  专栏  ›  技术社区  ›  Nanda Kishore

为什么django会检查设置。DATABASE_NAME数据库是否确实存在用于运行测试用例?

  •  3
  • Nanda Kishore  · 技术社区  · 17 年前

    好天气,我突然想到,django实际上检查了 为什么会这样。我以为django会拿 但不是db的实际存在吧?

    1 回复  |  直到 17 年前
        1
  •  3
  •   Jarret Hardie    17 年前

    简洁的问题。..你知道,我从来没有想过。简短的回答是Django本身没有 需要

    由于测试数据库尚不存在,django必须首先使用正常设置进行连接。DATABASE_NAME,用于创建测试数据库。

    所以,它的工作原理是这样的:

    • create_test_db cursor = self.connection.cursor()
    • 一旦连接到数据库,后端特定的处理程序将发出 CREATE DATABASE
    • 后端特定的处理程序关闭连接,然后返回到测试运行器,测试运行器交换正常连接 settings.DATABASE_NAME 对于test_database_name
    • connection.cursor() 将使用正常设置模块,但现在该模块已替换出数据库名称
    • destroy_test_db 功能。

    如果你感兴趣,主要部分的相关代码在django.db.backends.creation中。看看 _create_test_db 功能。

    create_test_db backend 基类,大多数实际的后端处理程序不会覆盖它,因此有相当多的代码需要向下游推送并在每个后端复制。