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



我正在研究教程 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';

最新更新