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
。