我正在研究教程 5,我尝试运行测试:
$ python manage.py test polls
Creating test database for alias 'default'...
Got an error creating the test database: (1044, "Access denied for user 'myprojectuser'@'localhost' to database 'test_myproject'")
Type 'yes' if you would like to try deleting the test database 'test_myproject', or 'no' to cancel: yes
Destroying old test database for alias 'default'...
Got an error recreating the test database: (1044, "Access denied for user 'myprojectuser'@'localhost' to database 'test_myproject'")
我尝试在 settings.py 中提及test_name
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
'TEST_NAME': 'test_database_myprojecttest',
}
}
我也跑了,"GRANT ALL PRIVILEGES ON test_myproject TO 'myprojectuser'@'localhost';
" 和
CREATE USER 'myprojectuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON myproject TO 'myprojectuser'@'localhost';
上面的两个查询命令是在设置数据库时运行的。
还是同样的错误。我该怎么办?
测试数据库的名称是通过在 NAME 中指定的数据库名称中添加"test_"来形成的。
如果你使用的是 Django <1.7,那么:
'TEST_NAME': 'test_myproject',
如果你使用的是 Django>= 1.7:那么你应该在设置中使用 TEST 作为字典:
'TEST' : {
'NAME': 'test_myproject',
}
目前您有:
'TEST_NAME': 'test_database_myprojecttest',
但是,仅当测试数据库名称与带有"test_yourDbName"的默认数据库名称不同时,才应在设置中指定测试数据库名称。
如果这没有帮助,那么你可以切换到Sqlite ENGINE。使用 Sqlite,测试数据库应该在内存中创建,而无需访问实际数据库。
设置数据库时,您已经运行:
CREATE USER 'myprojectuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON myproject TO 'myprojectuser'@'localhost';
这意味着您的用户无权访问其他数据库。然而,测试正在尝试创建自己的数据库"test_myproject"(根据您的错误文本)。因此,在创建用户myprojectuser之后,您还必须授予对该数据库的权限。只需在数据库控制台中运行以下命令:
GRANT ALL PRIVILEGES ON test_myproject TO 'myprojectuser'@'localhost';
FLUSH PRIVILEGES;
尝试在 SQL 查询中添加 .* 以包含表:
GRANT ALL PRIVILEGES ON test_myproject.* TO 'myprojectuser'@'localhost' IDENTIFIED BY 'password';