背景

去年为公司写了一个内部项目,图省事,开发和部署都用了 Django + SQLite,随着项目使用人数的增加,开始频繁出现错误 sqlite3.OperationalError: database is locked,不过 SQLite 并不是为网络应用、高并发设计的数据库,我需要将存量数据迁移至其他数据库。

同时,在本地开发时,我依然希望使用简单的 SQLite 数据库,这就有需要导出线上数据库数据并导入线下 SQLite。

SQLite 数据导出

1
python manage.py dumpdata > datadump.json

修改 Django 配置文件

因为公司主流都在使用 PostgreSQL,就顺便了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': f'{DB_DIR}/db.sqlite3',
}
} if DEBUG else {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'devops',
'USER': 'postgres',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}

恢复数据

1
2
python manage.py migrate
python manage.py loaddata datadump.json