Djangotesting应用程序错误 – 创buildtesting数据库时出现错误:权限被拒绝创build数据库

当我尝试使用命令testing任何应用程序时(当我尝试使用使用此命令的结构部署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. } } 

当Django运行testing套件时,它会创build一个新的数据库,在你的情况test_finance。 用户名为django的postgres用户没有创build数据库的权限,因此是错误消息。

当你运行syncdb时,Django不会尝试创build财务数据库,所以你不会有任何错误。

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

 => ALTER USER django CREATEDB; 

注意:ALTER USER <username> CREATEDB;使用的ALTER USER <username> CREATEDB; 命令需要在Django设置文件中匹配数据库用户。 在这种情况下,原来的海报,有用户作为django的上述答案。

我发现你的问题有趣的解决scheme。
实际上,对于MySQL,您可以为不存在的数据库授予权限。
因此,您可以在您的设置中为您的testing数据库添加名称“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将开始testing,没有任何问题。

如果数据库是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工作台 键入以下命令,以给settings.py中指定的用户提供所有权限

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

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