我正在编写教程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_nameDATABASES = {
'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';
在设置数据库时运行了上面的两个查询命令。
仍然是同样的错误。我该怎么办?
答案 0 :(得分:1)
测试数据库的名称是通过添加' test _'到NAME中指定的数据库的名称。
如果您使用的是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,应该在内存中创建测试数据库,而无需访问真正的数据库。
答案 1 :(得分:1)
设置数据库时,您已运行:
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;
答案 2 :(得分:0)
尝试在SQL查询中添加。*以包含表格:
if (intList != null && intList.Count > 0) {
// do something
}