python做应用程序错误_python - django测试应用程序错误 - 创建测试数据库时出错:权限被拒绝创建数据库...

python - 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.

}

}

5个解决方案

274 votes

当Django运行测试套件时,它会创建一个新数据库,在您的情况下为ALTER USER CREATEDB;.具有用户名django的postgres用户无权创建数据库,因此出现错误消息。

当您运行ALTER USER CREATEDB;或django时,Django不会尝试创建finance数据库,因此您不会收到任何错误。

您可以通过在超级用户的postgress shell中运行以下命令,将createdb权限添加到django用户(此堆栈溢出答案的帽子提示)。

=> ALTER USER django CREATEDB;

注意:ALTER USER CREATEDB;命令中使用的用户名需要与Django设置文件中的数据库用户匹配。 在这种情况下,原始海报,用户为django以上答案。

Alasdair answered 2019-06-04T15:38:37Z

10 votes

我找到了解决问题的有趣方法。

事实上,对于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将毫无问题地开始测试。

George H. answered 2019-06-04T15:39:40Z

3 votes

对于Postgres,用户必须具有createdb权限。

ALTER ROLE miriam CREATEDB;

请参阅此文档:[https://docs.djangoproject.com/en/2.0/topics/testing/overview/#the-test-database]

noufal valapra answered 2019-06-04T15:40:20Z

2 votes

如果数据库是mysql,那么这两个更改将完成所有事情。

1.打开mysite / mysite / settings.py

您的数据库设置应该有一个额外的TEST块,如projectname_test所示。

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME': 'myproject',

'USER': 'chandan',

'PASSWORD': 'root',

'HOST': 'localhost',

'PORT': '3306',

'TEST': {

'NAME': 'myproject_test',

},

}

}

2.使用mysql命令提示符或mysql workbench键入以下命令,以便为settings.py中指定的用户提供所有权限。

GRANT ALL PRIVILEGES ON myproject_test.* TO 'chandan'@'localhost';

现在你可以运行python manage.py test polls。

Chandan answered 2019-06-04T15:41:23Z

0 votes

如果你使用docker-compose.yml对我有用的是以下内容:

ALTER ROLE username CREATEDB;

GRANT ALL PRIVILEGES ON test_database_name.* TO 'username';

要么

ALTER ROLE username CREATEDB;

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';

我的设置如下所示:

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME': 'database_name',

'USER': 'username',

'PASSWORD': 'password',

'HOST': 'db',

'PORT': '3306',

}

}

我的docker-compose.yml看起来如下:

version: '3'

services:

web:

build: .

command: './wait_for_db_and_start_server.sh'

env_file: env_web

working_dir: /project_name

links:

- db

volumes:

- .:/volume_name

ports:

- "8000:8000"

depends_on:

- db

db:

image: mysql:5.7

restart: always

env_file: env_db

working_dir: /db

volumes:

- ./Dump.sql:/db/Dump.sql

ports:

- "3306:3306"

lmiguelvargasf answered 2019-06-04T15:42:08Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值