python - 用于数据库创建的 Django/postgres 设置,用于运行测试

标签 python django unit-testing

我的单元测试是从 django.test.TestCase 扩展而来的。使用 SQLite3 后端,它们运行良好。

我想用 PostgreSQL 后端运行它们,测试所做的第一件事就是尝试创建一个测试数据库。这失败了,因为 django 没有执行此操作的权限。我想配置 PostgreSQL/django 以便允许执行此操作,但我找不到有关如何执行此操作的任何文档。

这些是用于连接到数据库的设置(settings.py):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'mydb',
        'USER': 'myuser',
        'PASSWORD': 'myppasss',
        'HOST': 'localhost',
        'PORT': '',
    }
}

运行django 应用程序时,我总是有一个预先创建的数据库和用户,以便django 可以连接。

我有两个问题:

  • 在单元测试期间,用于创建数据库的连接设置是什么?我的理解是,django 用来连接到应用程序数据库的用户不需要(不应该)拥有数据库创建权限。
  • 所有这些都在哪里描述?我找到的最接近的是 here (DATABASES 配置参数中的 TEST 键),但这些设置主要指的是 Oracle 数据库,并且有不同的用途。

最佳答案

Django 将使用 the same connection settings as in your settings.py用于测试,但将使用不同的数据库(默认情况下,test_mydb,您的常规数据库是 mydb)。

您可以更改 django 用户权限以在 psql shell 中创建数据库。参见 this related answer了解更多信息。

=> ALTER USER myuser CREATEDB;

不知道可不可以限制权限,让django用户只能创建数据库test_mydb

关于python - 用于数据库创建的 Django/postgres 设置,用于运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33231494/

相关文章:

Python - 打破和分组用户输入

java - 当测试方法开始之前文件不存在时,为什么 getResourceAsStream() 返回 null?

python - Networkx 作为任务队列?

python - 创建一个对象,要求用户输入所需的用户 ID 并存储此 ID

python - argparse:位置参数的默认值不起作用?

python - 如何在 python 上制作网格(使用 matplotlib 或其他库)

python - Django ModelChoiceField - 使用 id 以外的东西?

javascript - 如果 django 表单提交失败则运行 javascript

django - 将整个 virtualenv 从 Windows 移动到 Mac 时无法导入 Django

java - 责任链模式