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

dan*_*ast 8 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': '',
    }
}
Run Code Online (Sandbox Code Playgroud)

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

我有两个问题:

  • 在单元测试期间,用于创建数据库的连接设置是什么?我的理解是,django用来连接到应用程序数据库的用户不需要(也不应该)具有数据库创建权限.
  • 这一切在哪里描述?我发现的最接近的是这里(TEST在关键的DATABASES配置参数),但这些设置主要是指Oracle数据库,并有不同的目的.

Ala*_*air 10

Django将使用与settings.py中相同的连接设置进行测试,但将使用不同的数据库(默认情况下,test_mydb常规数据库所在的位置mydb).

您可以更改django用户权限以在psql shell中创建数据库.有关详细信息,请参阅此相关答案.

=> ALTER USER myuser CREATEDB;
Run Code Online (Sandbox Code Playgroud)

我不知道是否可以限制权限,以便django用户只能创建数据库test_mydb.