0

I have a column problem in the database when the yak uses python manage.py migrate. I want to write code to use DATABASE_URL in docker-compose.yml, how should I solve it? I've experimented with writing these codes. Can you advise me a bit?

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| DatabaseUBU        |
| information_schema |
| mariadb            |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.02 sec)

mysql> create database mariadb;
ERROR 1007 (HY000): Can't create database 'mariadb'; database exists

docker-compose.yml

version: '3.7'
services:
  db:
    image: mariadb:10
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=mariadb
      - MYSQL_DATABASE=mariadb
      - MYSQL_USER=mariadb
      - MYSQL_PASSWORD=mariadb
      - MARIADB_ROOT_PASSWORD=mysecretpassword
    ports:
      - 3306:3306
    volumes:
      - "mysqldata:/var/lib/mysql"  

  web:
    build: .
    restart: always
    command: python manage.py runserver 0.0.0.0:8000
    environment:
      - DATABASE_URL=mariadb+mariadbconnector://user:mariadb@db:3306/mariadb
    ports:
      - "8000:8000"
    depends_on:
      - db
      
volumes:
  mysqldata:

setting.py

import dj_database_url
import os

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        **dj_database_url.config(default=os.environ.get('DATABASE_URL'))
    }
}
wanx
  • 51
  • 1
  • 4
  • Is your username & password for database correct? Try with this variable DATABASE_URL=mysql://mariadb:mariadb@db:3306/mariadb – Mas Dimas Jan 29 '23 at 16:39
  • Thank you Mas, I tried it, it still stuck to the original problem. django.db.utils.OperationalError: (1046, 'No database selected') – wanx Jan 29 '23 at 17:04
  • What's the actual error? When are you actually running `./manage.py migrate`? (In an entrypoint wrapper script at container startup, or at some other time?) – David Maze Jan 30 '23 at 12:01

1 Answers1

0

in setting.py

import os
DATABASE_URL = os.environ.get('DATABASE_URL', '')

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mariadb', #add name database
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}

if DATABASE_URL:
    import dj_database_url
    DATABASES['default'] = dj_database_url.config(default=DATABASE_URL)
wanx
  • 51
  • 1
  • 4