使用数据库 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 变量来指定 运行 应用程序时要使用的数据库。希望对你有帮助。
我的目标是使用 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 变量来指定 运行 应用程序时要使用的数据库。希望对你有帮助。