如何将Django数据库从Sqlite3切换至PostgreSQL

要把Django当前项目的数据库从sqlite3切换为PostgreSQL,基本思路就是先使用Django的Dump命令把sqlite3数据导出,然后将settings文件中的数据源更改为PostgreSQL,最后再使用Django的loaddata命令将数据导入。

环境

Ubuntu 16.04
PostgreSQL 9.5
Django 1.11.11

1. 导出(dump)已有的数据

python3 manage.py dumpdata > datadump.json

导出的时候,可能出现这个错误提示:
CommandError: Unable to serialize database: no such table: filebrowser_filebrowser
将这个model排除即可解决:

python manage.py dumpdata > dump.json --exclude=filebrowser.filebrowser

2. 将settings.py的数据源改成支持PostgresSQL

这里略过了PostgresSQL安装过程,计划下次单独写一篇文章。
Sqlite3的数据库连接

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

PostgreSQL的数据库连接

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myproject',
        'USER': 'myprojectuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}

3. 初始化Postgres表结构

python3 manage.py migrate --run-syncdb

4. 导入前清空初始数据

这时候导入,会提示数据已存在错误,因为Django在migrate的时候,会存入一些初始数据在ContentType表中,将其清空即可。

python3 manage.py shell
>>> from django.contrib.contenttypes.models import ContentType
>>> ContentType.objects.all().delete()
>>> quit()

5. 导入数据,试一下是不是成功了

python3 manage.py loaddata datadump.json

你可能感兴趣的:(如何将Django数据库从Sqlite3切换至PostgreSQL)