使用数据库 postgres 迁移失败

Migrate with database postgres fails

我的目标是使用 postgres 作为我的 django 模型的默认数据库。我正在为 postgres 使用 docker-compose,它似乎已经启动并且 运行。

version: '3.2'
services:

  postgres:
    image: postgres:13.4
    environment:
      POSTGRES_DB: backend_db
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
    volumes:
      - database-data:/var/lib/postgresql/data/ 
    ports:
      - 5432:5432
    networks:
      - postgres     

volumes:
  database-data:
    driver: local  

networks:
  postgres:
    driver: bridge  

但是,当我执行 python3 manage.py migrate --database postgres 时,我得到以下信息:

Operations to perform:
  Apply all migrations: admin, auth, authentication, authtoken, contenttypes, sessions, token_blacklist, vpp_optimization
Running migrations:
  No migrations to apply.

当我做 python3 manage.py runserver 时,问题也很明显,我得到:

Performing system checks...

System check identified no issues (0 silenced).

You have 31 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, authentication, authtoken, contenttypes, sessions, token_blacklist, vpp_optimization.
Run 'python manage.py migrate' to apply them.
April 11, 2022 - 05:32:10
Django version 3.1.7, using settings 'core.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

似乎命令 python3 manage.py migrate --database postgres 没有被执行。

这是数据库的 settings.py 部分:

DATABASES = {
    'default': get_config(
        'DATABASE_URL',
        'sqlite:///' + BASE_DIR.child('db.sqlite3'),
        cast=db_url
    ),
    'postgres': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': get_config('DB_NAME', 'backend_db'),
        'USER': get_config('DB_USER', 'postgres'),
        'PASSWORD': get_config('DB_PASSWORD', 'postgres'),
        'HOST': get_config('DB_HOST', 'postgres-service'),
        'PORT': get_config('DB_PORT', '5432')
    }
}

知道我做错了什么吗?

问题是当你 运行:

python3 manage.py migrate --database postgres

您明确定义了要迁移数据库模式的数据库在 postgres 中。但是当您 运行 您使用的应用程序时:

python3 manage.py runserver

根据您的设置,是否有任何迹象表明您将使用 postgres 数据库。所以我认为此时您正在使用 sqlite 数据库。

您可以做的一件事是设置一个 env 变量来指定 运行 应用程序时要使用的数据库。希望对你有帮助。