创建测试数据库时出现错误 - django,docker,mysql

26 浏览
0 Comments

创建测试数据库时出现错误 - django,docker,mysql

我在创建测试数据库时遇到了问题。我使用mysql作为数据库和docker compose。我在运行docker-compose时没有问题,但是当我运行测试时,它会显示以下错误消息。请注意,django服务的名称是web,mysql服务的名称是db。

$ docker-compose run --rm web sh -c "python manage.py test"

Creating sociallogin_web_run ... done

Creating test database for alias 'default'...

创建测试数据库时出错:(1044, "Access denied for user 'myuser'@'%' to database 'test_mydb'")

我的docker-compose.yml文件如下:

version: "3.9"

services:

db:

image: mysql:8

env_file:

- .env

command:

- --default-authentication-plugin=mysql_native_password

restart: always

volumes:

- data:/var/lib/mysql

web:

build: .

command: >

sh -c "python manage.py wait_for_db &&

python manage.py makemigrations &&

python manage.py migrate &&

python manage.py runserver 0.0.0.0:8000"

volumes:

- .:/code

ports:

- "8000:8000"

depends_on:

- db

env_file:

- .env

volumes:

data:

我的.env文件如下:

MYSQL_ROOT_PASSWORD=rootpass

MYSQL_USER=exampleuser

MYSQL_PASSWORD=examplepass

MYSQL_DATABASE=exampledb

MYSQL_PORT=3306

SECRET_KEY=exmaple_random_characters

在settings.py中的DATABASES配置如下:

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME': os.environ.get('MYSQL_DATABASE'),

'USER': os.environ.get('MYSQL_USER'),

'PASSWORD': os.environ.get('MYSQL_PASSWORD'),

'PORT': os.environ.get('MYSQL_PORT'),

'HOST': 'db',

'TEST': {

'NAME': 'test_mydb',

}

}

}

我查看了这个链接(https://stackoverflow.com/questions/14186055/django-test-app-error-got-an-error-creating-the-test-database-permission-deni),甚至尝试了这个链接(https://stackoverflow.com/a/45131868/11790764),但都没有帮助。有人遇到过类似的问题吗?提前感谢大家。

0
0 Comments

在使用django、docker和mysql创建测试数据库时出现了错误。这个问题出现的原因是使用的用户没有创建和管理数据库的权限。解决方法是使用数据库的root用户重新测试。具体的解决方法可以参考这个链接:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'db'

0
0 Comments

出现这个问题的原因是mysql用户权限问题。解决方法是在初始化mysql容器时使用root用户。具体的更改如下:

将Django的DATABASES设置更改为:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ.get('MYSQL_DATABASE'),
        'PASSWORD': os.environ.get('MYSQL_ROOT_PASSWORD'),
        'PORT': os.environ.get('MYSQL_PORT'),
        'HOST': os.environ.get('MYSQL_HOST'),
    }
}

在.env文件中进行更改:

MYSQL_ROOT_PASSWORD=myrootpassword
MYSQL_DATABASE=mydatabasename
MYSQL_PORT=3306
MYSQL_HOST=db
SECRET_KEY=random_secret_key_that_has_no_dollar_sign

在docker-compose.yml文件中更改端口映射部分:

ports:

- "3308:3306"

需要注意的是,将外部端口改为3308,内部端口仍然保持3306。这是因为已经有一个运行中的mysql容器使用默认端口3306,所以需要将外部端口改为其他端口。而Django应用程序与内部端口进行通信,因此.env文件中的端口号保持为3306。

0