当我尝试用命令测试任何应用程序时(我注意到当我尝试使用fabric部署我的项目时,它使用了这个命令):
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.
}
}
如果数据库是MySQL,那么这两个更改将完成任务。
1.Open 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工作台输入下面的命令,将所有权限赋予settings.py中指定的用户
GRANT ALL PRIVILEGES ON myproject_test.* TO 'chandan'@'localhost';
现在你可以运行下面的命令:
python manage.py test polls
如果数据库是MySQL,那么这两个更改将完成任务。
1.Open 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工作台输入下面的命令,将所有权限赋予settings.py中指定的用户
GRANT ALL PRIVILEGES ON myproject_test.* TO 'chandan'@'localhost';
现在你可以运行下面的命令:
python manage.py test polls
我找到了一个有趣的方法来解决你的问题。
事实上,对于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将毫无问题地启动测试。
我不久前也遇到了同样的问题。
这就是我如何能够解决django 3.10.6
首先使用这个命令通过终端进入dbshell
python3 manage.py dbshell
这将带您到您的项目dbie,如果您已经创建了一个。
另一种获取数据库的方法是:
sudo su postgres
然后:
psql
这将把您带到默认数据库。然后连接到你的项目db通过:
\c projectdb
在这一点上,使用这个命令来修复你的错误:
ALTER USER you CREATEDB;
用'\q'退出数据库;使用' Exit '退出postgres,然后运行:
python3 manage.py test app
错误将被修复,您的测试将通过
Found 1 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.003s
OK
Destroying test database for alias 'default'...