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

问题描述 投票:0回答:5

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

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

或者本地开发使用SQLite有什么原因吗?本地开发不建议使用Postgres吗?

python django postgresql sqlite
5个回答
45
投票

您可以尝试以下步骤:

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


来源:将 Django 数据库从 SQLite 迁移到 MySQL 的最佳方法是什么?


8
投票

当您更改数据库时,您可能会得到一个 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 the bottom right corner you will get the encoding will be anything else than utf-8
4.on the top bar select encoding to UTF-8

你可以走了..再来

python manage.py load data datadump.json

我为此受了很多苦……所以请大家点赞,分享也升值。 谢谢你! 如需了解更多信息,您可以观看此视频:https://youtu.be/RBtEr3TXNwg


5
投票

这里有一个关于如何做到这一点的很棒的教程,来自 Django Girls

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


1
投票

希望我没有迟到。因此,根据我的经验,如果您的 sqlite 数据库中已经有数据,您可能会面临一些挑战,因为 sqlite 中的某些字段与 postgres 中的字段不直接匹配。例如日期时间和布尔字段。

我找到了一个可以帮助我做到这一点的图书馆:

https://github.com/Hitman23/pgloader

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


-1
投票

我尝试了所有这些步骤,甚至检查了不同的来源(所有这些都反映了此处建议的步骤)。当我将表和模式从 sqlite3 迁移到 postgresql 时,一切似乎都相应进行,但是当需要从 data.json 文件加载 dtaa 时,我不断收到错误,指出重复的 pk,因此没有任何数据被复制到我的 postgresql 表中。我确保数据文件的格式为 UTF-8 以避免出现任何问题,但我不知道如何解决此问题。请问有什么建议吗?

© www.soinside.com 2019 - 2024. All rights reserved.