You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Windows环境下Django项目的SQLite3数据库迁移至Linux环境的PostgreSQL

从SQLite3迁移到PostgreSQL的完整解决方案(解决你的空dumpdata问题)

首先得搞清楚你为什么生成了空的data.json——你现在在Linux环境里,项目的settings.py应该已经配置成指向新的PostgreSQL数据库了,但这个PostgreSQL库是空的,所以dumpdata自然导出的是空列表。你需要先让Django连接回原来的SQLite3数据库,才能导出真实的数据。下面是一步步的解决流程:

步骤1:临时切换回SQLite3导出数据

  1. 打开项目根目录下的settings.py,找到DATABASES配置块,修改为指向你拿到的databaseproject.db:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'databaseproject.db',  # 注意路径要和你的文件位置匹配,找不到的话可以用绝对路径
    }
}
  1. 激活你的虚拟环境,重新执行dumpdata命令(这次加上--natural-primary来处理自定义主键的模型,避免后续导入冲突):
python manage.py dumpdata --natural-foreign --natural-primary --exclude=auth.permission --exclude=contenttypes --indent=4 > data.json
  1. 现在检查data.json,里面应该有你朋友开发时的真实数据了,而不是空列表。

步骤2:配置PostgreSQL环境

  1. 先创建PostgreSQL的数据库和用户(用命令行操作):
# 进入PostgreSQL命令行
sudo -u postgres psql

# 创建项目数据库(替换成你的项目名称)
CREATE DATABASE your_project_name_db;

# 创建数据库用户(替换用户名和密码)
CREATE USER your_db_user WITH PASSWORD 'your_secure_password';

# 给用户授予数据库的全部权限
GRANT ALL PRIVILEGES ON DATABASE your_project_name_db TO your_db_user;

# 退出PostgreSQL命令行
\q
  1. 安装PostgreSQL的Django适配器,如果还没装的话:
pip install psycopg2-binary
  1. 再次修改settings.py,切换回PostgreSQL配置:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'your_project_name_db',
        'USER': 'your_db_user',
        'PASSWORD': 'your_secure_password',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

步骤3:初始化PostgreSQL的表结构

执行migrations命令,创建和原SQLite3一致的空表结构:

python manage.py makemigrations
python manage.py migrate

⚠️ 不要用migrate --run-syncdb,它会跳过migrations文件,可能导致表结构和原项目不一致。

步骤4:导入数据到PostgreSQL

用刚才导出的data.json导入数据:

python manage.py loaddata data.json

常见问题排查

  • 导入时报外键/主键冲突:确认你在dumpdata时确实排除了contenttypes和auth.permission,这两个表是Django自动生成的,migrate后已经有数据,导入时会冲突。如果还有问题,可以尝试额外排除sessions表(如果不需要保留会话数据)。
  • 字段类型不兼容:SQLite3对字段类型的限制比较宽松,比如允许CharField存超长内容,PostgreSQL会严格检查。如果导入报错,检查你的模型定义,确保字段类型在PostgreSQL里合法。
  • 编码问题:创建PostgreSQL数据库时可以指定UTF-8编码:CREATE DATABASE your_project_name_db ENCODING 'UTF8';,避免中文等特殊字符乱码。

内容的提问来源于stack exchange,提问作者Developer23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 11:37:33