django测试应用程序错误 - 在创建测试数据库时遇到错误:没有权限创建数据库。

6 浏览
0 Comments

django测试应用程序错误 - 在创建测试数据库时遇到错误:没有权限创建数据库。

当我尝试使用以下命令测试任何应用程序时(我在使用使用此命令的Fabric部署myproject时注意到这一点):

python manage.py test appname

我会得到这个错误:

Creating test database for alias 'default'...
Got an error creating the test database: permission denied to create database
Type 'yes' if you would like to try deleting the test database 'test_finance', or 'no' to cancel

syncdb 命令似乎可以工作。我在 settings.py 中的数据库设置如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'finance',                      # Or path to database file if using sqlite3.
        'USER': 'django',                      # Not used with sqlite3.
        'PASSWORD': 'mydb123',                  # Not used with sqlite3.
        'HOST': '127.0.0.1',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

admin 更改状态以发布 2023年5月25日
0
0 Comments

我找到了一个有趣的解决方案来解决你的问题。
事实上,对于MySQL,您可以授予不存在的数据库的权限。
因此,您可以在设置中将名称“test_finance”添加到您的测试数据库中:

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'finance',                      # Or path to database file if using sqlite3.
        'USER': 'django',                      # Not used with sqlite3.
        'PASSWORD': 'mydb123',                  # Not used with sqlite3.
        'HOST': '127.0.0.1',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
        'TEST': {
            'NAME': 'test_finance',
        },
    }
}

以root用户身份启动MySQL shell:

mysql -u root -p

现在在MySQL中授予此不存在的数据库的所有权限:

GRANT ALL PRIVILEGES ON test_finance.* TO 'django'@'localhost';

现在Django将无任何问题地开始测试。

0
0 Comments

当Django运行测试套件时,它会创建一个新的数据库,对于你的情况是test_finance。postgres用户名为django的用户没有创建数据库的权限,因此会出现错误信息。

当你运行migratesyncdb时,Django不会尝试创建finance数据库,因此不会出现任何错误。

你可以通过以下命令在postgres shell中以超级用户身份为django用户添加创建数据库的权限(感谢这个堆栈溢出答案)。

=> ALTER USER django CREATEDB;

注意:ALTER USER <用户名> CREATEDB;命令中使用的用户名需要与你Django设置文件中的数据库用户匹配。在这种情况下,原帖作者将用户设置为django

0