Django教程5,1044访问被拒绝用户@' localhost'数据库错误

时间:2017-01-12 14:48:18

标签: python django

我正在编写教程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'; 

在设置数据库时运行了上面的两个查询命令。

仍然是同样的错误。我该怎么办?

3 个答案:

答案 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
}