- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我会经常为我的 Django 项目运行测试用例。但是一个美好的一天,我突然想到 django 实际上会检查settings.DATABASE_NAME db 在运行测试用例时实际存在。为什么会这样。我以为 django 会接受settings.DATABASE_NAME 并创建一个名为“test_”的测试数据库 +设置.DATABASE_NAME。它还检查数据库是否与name = settings.DATABASE_NAME,实际存在与否(for创建测试数据库)?理想情况下,只应检查名称但不是数据库的实际存在吗?
我浏览了 django 源代码,发现用于创建 testdb 的“连接”实际上是使用 DATABASE 设置选项创建的。它应该为设置的值而不是它们的实际存在而烦恼。对吧?
最佳答案
好问题……你知道,我从来没有想过这个问题。简短的回答是 Django 本身并不需要验证 DATABASE_NAME 确实存在,但它确实需要连接到数据库以创建测试数据库。大多数数据库接受(有些需要)DATABASE_NAME 以制定连接字符串;这通常是因为您要连接的数据库名称影响了您的连接 session 的权限。
因为测试数据库还不存在,django 必须首先使用正常设置连接。DATABASE_NAME 以创建测试数据库。
所以,它是这样工作的:
create_test_db
的函数,它将使用正常设置连接到数据库。它使用普通的 cursor = self.connection.cursor()
命令执行此操作,该命令显然使用正常设置值,因为此时它知道存在的所有值。CREATE DATABASE
命令。settings.DATABASE_NAME
替换为 test_database_nameconnection.cursor()
的后续调用都将使用正常的设置模块,但现在该模块具有换出的数据库名称destroy_test_db
函数后恢复旧数据库名称。如果你有兴趣,主要部分的相关代码在django.db.backends.creation中。查看 _create_test_db
函数。
我认为 Django 设计者可以逐个数据库地创建异常,因为并非每个数据库都需要连接字符串中的当前数据库名称,但这需要进行一些重构。现在,create_test_db
函数实际上位于 backend
基类之一中,并且大多数实际的后端处理程序不会覆盖它,因此有相当多的代码可以向下游推送并在每个后端进行复制。
关于database - 为什么 django 检查 settings.DATABASE_NAME db 是否实际存在以运行测试用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/616567/
我在 mysql 中完成了一些简单的 sql 命令“连接数据库名”和“使用数据库”据我了解,这似乎都是一样的...... please see the snapshot:-- 我非常确定我会在 sta
我在 MySQL 和数据库 View 方面遇到了一个奇怪的问题。 我有一个这样定义的 View : CREATE VIEW circuits AS (SELECT Id, Id AS Old_Id,
我正在寻找一个选项/想法,如何在使用 mysqldump 时摆脱“USE database_name”语句?我设法摆脱仅创建数据库的情况。 谢谢! 最佳答案 我不确定 mysqldump 命令是否有实
我的日志读取器代理中收到一条错误消息: The process could not execute 'sp_replcmds' on 'Database Name'. 我创建了另一个具有较大查询超时和
因此,我正在为多个应用程序执行旧的工作代码复制/粘贴,这些应用程序将在同一部手机上找到它们的方式。我可以复制/粘贴 SQLite 帮助程序类而不更改数据库和表名称吗?表和数据库是否存在“异花授粉”的风
#!/bin/bash # . ~/some_env database_name 代码看起来就像上面的代码,每次我尝试在 bash 中运行它时,我都会收到文件或目录不存在的错误。如果我创建目录,它会提
我是 PostgreSQL 的初学者。 我想从 Postgres 的查询编辑器连接到另一个数据库 - 比如 MySQL 或 MS SQL Server 的 USE 命令。 我通过搜索 Internet
我可以使用以下查询检索单个数据库 Select Table_catalog[Instance Name], Table_name[Database Table], Column_name[Column
下面的代码嵌入在 vb.net 项目的 .sql 文件中。它给了我一个错误: 在 sys.servers 中找不到服务器“DATABASE_NAME”。验证是否指定了正确的服务器名称。如有必要,执行存
我刚刚开始在 Andriod 中使用 SQLite。我知道它是 SQLiteOpenHelper 的构造函数。但是这个构造函数在被触发时做了什么。它会创建数据库还是什么?寻求您的指导。 最佳答案 根据
我的数据库已经命名为 als,但我仍然遇到错误。 最佳答案 不完全是您问题的答案,但评论时间太长: 建立数据库连接后,您可以通过 SHOW DATABASES 查询现有数据库。 connect_er
当使用 phpmyadmin 导出 sql 转储时,它会像这样创建 VIEW 表: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL
当我去浏览表格数据时,我完全不知道这个错误是如何或为什么显示的。 我确实注意到的一件事是存储引擎已切换到 MyISAM,InnoDB 表示它已被禁用。 我正在等待托管公司的回复,但在收到他们的回复之前
我会经常为我的 Django 项目运行测试用例。但是一个美好的一天,我突然想到 django 实际上会检查settings.DATABASE_NAME db 在运行测试用例时实际存在。为什么会这样。我
我有以下内容: CREATE TABLE afil2 ( id bigint(20) NOT NULL AUTO_INCREMENT, `apellido` varchar(30),
这个问题已经有答案了: How to switch databases in psql? (15 个回答) 已关闭 3 年前。 我必须从 Java 代码执行一个脚本,该脚本应该创建一个数据库,然后在该
我在带有 MyISAM 存储引擎的 mysql 中有一个表。 我想在特定表上创建分区,为此我正在执行查询 - alter table Stops PARTITION BY KEY(`stop_id`)
我试图在不使用“show tables from database_name”或“select table_name from information_schema.tables”查询的情况下返回表名
我遇到了测试问题。这是我第一次编写测试,但遇到了问题。 我刚刚在我的应用 users 中创建了一个测试文件夹,以及用于测试 url 的 test_urls.py。 当我输入时: python mana
您好,我是 python 和 django 的新手,我正在练习 django,但是当我命令 python manage.py makemigration 和 python manage.py migr
我是一名优秀的程序员,十分优秀!