Pie*_*ert 26 sqlite django postgresql data-migration
我需要将一个复杂的项目从sqlite迁移到PostgreSQL.很多人似乎都有外键,数据截断等问题......
编辑:我尝试了django-command-extensions DumpScript,但它不能在我的2GB RAM PC上使用我当前的DataSet运行.
Nim*_*imo 35
根据我的经验,从SQL转储和还原不能正常工作.
您应该遵循以下顺序:
1.将db内容转储到json
$ ./manage.py dumpdata > dump.json
Run Code Online (Sandbox Code Playgroud)
2.在settings.py中切换后端
DATABASES = {
# COMMENT OUT:
# 'default': dj_database_url.config(default='sqlite:////full/path/to/your/database/file.sqlite'),
# ADD THIS INSTEAD:
'default': dj_database_url.config(default='postgres://localhost:5432/postgres_db_name'),
}
Run Code Online (Sandbox Code Playgroud)
3. Syncdb并将新数据库迁移到同一个表结构
$ ./manage.py syncdb
$ ./manage.py migrate
Run Code Online (Sandbox Code Playgroud)
4.将json加载到新数据库.
$ ./manage.py loaddata dump.json
Run Code Online (Sandbox Code Playgroud)
祝贺你!现在新数据在你的postgres数据库中.
Mic*_*ann 17
以下是Nimo的回答和Stephen对Django 1.7+ 的回答的改进:
./manage.py dumpdata --natural-primary --natural-foreign > dump.jsonDATABASES在settings.py指向新(PostgreSQL的)分贝../manage.py migrate./manage.py loaddata dump.json我遇到的一个问题是SQLite似乎没有实际强制执行CharFields 的最大长度.在我的情况下,这使loaddata步骤失败.我能够通过以下方式找到(并删除)具有太长CharField值的模型实例:
MyModel.objects.extra(where=["LENGTH(text) > 20"]).delete()
Run Code Online (Sandbox Code Playgroud)
一旦我在上面的第1步之前做了这个,一切都运转了.
我从来没有做过,但我会尝试的是.
根据@Nimo 的回答,使用 from"syncdb"不适用于Django 1.9及更高版本(适用于Django 1.7)
相反,请使用以下命令:
python manage.py migrate
这是 Postgres 设置配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21276 次 |
| 最近记录: |