考虑一个具有两个本地数据库配置的项目,称为
'sqlite'
(默认)和 'postgresql'
。运行 migrate --database=postgresql
成功地将前几次迁移迁移到 postgresql,然后突然开始使用错误的数据库后端,导致以下错误:
sqlite3.OperationalError: no such table: myapp_mymodel
正在开发一个旧版 Django 3.2 项目,该项目包含十多个应用程序和总共超过 200 个迁移。该项目配置为在生产中使用 PostgreSQL,但使用 SQLite 进行本地测试。
现在,为了保持一致性,我想将项目配置为在本地使用 PostgreSQL,而不是 SQLite。
所以,这就是我所做的:
'postgresql'
的数据库配置,除了
'default'
SQLite 配置(参见下面的示例)DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
...,
},
'postgresql': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
...,
},
}
python manage.py migrate --database=postgresql
问题
Running migrations:
Applying myapp.0002_copy_data_from_mymodel...python-BaseException
Traceback (most recent call last):
...
sqlite3.OperationalError: no such table: myapp_mymodel
...
File "/home/dev/Documents/my_project/venv/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 423, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: myapp_mymodel
显然,由于某种原因,Django 突然开始使用
sqlite3
后端,而不是 postgresql 后端。
我使用python manage.py showmigrations --database=postgresql
并通过在
psql
中列出表来确认成功的迁移确实应用于 postgresql 数据库。表 myapp_mymodel
确实存在于 PostgreSQL 数据库中。我还检查了有问题的迁移(自定义数据迁移)及其依赖项,但没有看到任何异常情况。应用其他类似的数据迁移没有出现问题。
问题
--database=postgresql
选项,我该如何解决这个问题?
研究有关... 还有一些类似的问题,但我在那里找不到合适的答案,例如:
--database=postgresql
选项。 然而,由于某种原因,Django 似乎决定回退到
default数据库引擎,该引擎被配置为 sqlite3。 我们可以通过将
'postgresql'
设置为
default数据库来解决此问题:
DATABASES = {
'sqlite': {
'ENGINE': 'django.db.backends.sqlite3',
...,
},
'postgresql': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
...,
},
}
DATABASES['default'] = DATABASES['postgresql']