将Django开发数据库从默认的SQLite更改为PostgreSQL

时间:2018-05-14 04:07:26

标签: python django postgresql sqlite

从默认的SQLite数据库迁移到Postgres数据库需要采取哪些步骤?

我这样做是为了让我的本地开发环境尽可能靠近我的实时服务器(使用postrgres)。

或者本地开发使用SQLite的原因是什么?是不是建议使用Postgres进行本地开发?

4 个答案:

答案 0 :(得分:6)

您可以尝试以下步骤:

1.安装psycopg2以配置数据库:

pip install psycopg2


2.在默认settings.py

更改原始值:

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

要:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'NAME_OF_DB',
        'USER': 'DB_USER_NAME',
        'PASSWORD': 'DB_PASSWORD',
        'HOST': 'localhost',
        'PORT': 'PORT_NUMBER',
    }
}


3.迁移数据库:

python manage.py makemigrations
python manage.py migrate

<小时/> 修改 谢谢@robotHamster评论。以下是同步现有数据的方法:

首先备份数据:

python manage.py dumpdata > datadump.json

更改数据库设置后:

python manage.py loaddata datadump.json

<小时/> 资料来源:What's the best way to migrate a Django DB from SQLite to MySQL?

答案 1 :(得分:2)

以下是有关如何从Django Girls

执行此操作的精彩教程

它会显示安装以及settings.py中所需的更改。

答案 2 :(得分:2)

当您更改数据库时,您可能会得到一个UNICODEERRO:'utf-8'

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

在浪费了超过5天的时间后,我终于找到了解决方案..您永远不会在互联网上遇到那个准确的错误,我自己弄清楚了。

python manage.py dumpdata > datadump.json

然后根据您的数据库更改数据库settings.py,然后

python manage.py makemigrations
python manage.py migrate
python manage.py loaddata datadump.json

然后如果您遇到错误,我会提到:

1.Install notepad ++
2.open your datadum.json file in notepad++
3.on buttom right corner you will get the encodin will be anything else than utf-8
4.on top bar select encoding to UTF-8

您很好,然后再去

python manage.py loaddata datadump.json

我为此受了很多苦难...所以请竖起大拇指并分享股份 谢谢! 要获得更多许可,您可以观看此视频:https://youtu.be/RBtEr3TXNwg

答案 3 :(得分:0)

希望我不迟到。所以根据我的经验,如果你的sqlite数据库中已有数据,你可能会面临一些挑战,因为sqlite中的某些字段不会与postgres中的字段直接匹配。例如datetime和boolean fields。

我找到了一个帮助我这样做的图书馆:

https://github.com/Hitman23/pgloader

该库可以进行任何所需的转换。