django数据迁移相关

236 阅读5分钟

数据迁移

django常见的数据操作我觉得可以分为三种。从模型同步到数据库、从数据库生成模型定义、数据库备份和恢复

1 从模型同步到数据库

首先数据库迁移的两大命令:

python manage.py makemigrations & python manage.py migrate

前者是将model层转为迁移文件migration,后者将新版本的迁移文件执行,更新数据库。

这两中命令调用默认为全局,即对所有最新更改的model或迁移文件进行操作。如果想对部分app进行操作,就要在其后追加app name

$ python manage.py makemigrations app_name

$ python manage.py migrate app_name

如果想要精确到某个迁移文件(0004_xxx.py):

$ python manage.py migrate app_name 0004

如果想看迁移文件的执行状态,可以用showmigrations命令查看:


$ python manage.py showmigrations

admin

[X] 0001_initial

auth

[X] 0001_initial

[X] 0002_alter_permission_name_max_length

显示django已知的migrations和状态。

注意

数据库的命令稍有不慎可能就会掉坑。特别是migrate命令,由于django的数据库中包含了migrations的记录,如果migrations文件丢失,很可能造成migrate失败。所以有必要将migrations文件加入版本控制,保证开发时的migrations记录和文件相匹配。

.如果migrate出现了失败,很可能是因为migration文件包含的变更信息由于当前数据库的约束无法完完成。这时就应该去数据中找到这些记录或键的位置,删掉重做即可。一般这些数据存在的表为:外键约束对应的表、auth_permission、django_content_type和django_migrations

2 数据库生成模型定义


python3 manage.py inspectdb > app/models.py

这段代码的作用是使用 Django 框架中的 inspectdb 命令来根据现有的数据库结构生成对应的模型定义,并将结果输出到指定的文件 app/models.py 中。

具体解释如下:

inspectdb :这是 Django 提供的一个管理命令,用于检查数据库的结构并尝试推断出相应的模型定义。

:这是重定向操作符,用于将命令的输出重定向到指定的文件。

app/models.py :指定了输出的目标文件,即生成的模型定义将被写入到这个文件中。

这样做的好处是,如果您已经有一个现有的数据库,并且希望在 Django 项目中使用它,通过执行这段代码,Django 会尝试分析数据库的表结构,并为您生成相应的模型类定义,从而方便您在 Django 项目中对该数据库进行操作和管理

3 数据库备份和恢复

  • 备份

django 项目提供了一个导出的方法 python manage.py dumpdata, 不指定 appname 时默认为导出所有的app


python manage.py dumpdata myapp > myapp.json

其他


导出特定模型的数据

python manage.py dumpdata my_app.User > user_data.json

python manage.py dumpdata --format=xml > data.xml

  • 恢复


python manage.py loaddata myapp.json

的主要作用是将预定义的序列化数据加载到数据库中。

它常用于以下场景:

数据恢复

当您需要从备份或先前导出的数据中恢复数据库的部分或全部内容时,使用 loaddata 可以快速将数据重新插入到数据库。

初始数据填充

在项目初始化阶段,您可以准备一些初始数据(例如默认的用户、配置选项等),然后使用 loaddata 一次性加载这些数据,以便系统在启动时就具有一定的基础数据。

测试数据加载

在测试环境中,为了方便进行各种测试用例的执行,您可以使用 loaddata 来快速加载特定的测试数据,确保测试的准确性和可重复性。

sqlmigrate 显示迁移的SQL语句

sqlmigrate: 显示迁移的SQL语句,具有sqlall的功能


python manage.py sqlmigrate myapp 0001_initial

执行上述命令后,sqlmigrate 将会输出该迁移操作对应的具体 SQL 语句,例如创建表、添加字段、设置索引等相关的 SQL 代码。

这对于理解数据库迁移的具体操作以及在必要时手动修改或优化生成的 SQL 语句非常有用。

再比如,如果您的项目中有多个应用,并且您想要查看特定应用的特定迁移文件的 SQL 语句,只需要按照相同的格式指定应用名称和迁移文件名称即可。

参考

Django模型修改及数据迁移 - 再见紫罗兰 - 博客园

www.cnblogs.com/linxiyue/p/…

Django manage.py 命令详解 - 娇小赤雅 - 博客园

www.cnblogs.com/huaxiayuyi/…


C:\Users\Administrator> python manage.py help

Type 'manage.py help <subcommand>' for help on a specific subcommand.

Available subcommands:

[auth]

changepassword 更改密码

createsuperuser 创建admin超级用户

[contenttypes]

remove_stale_contenttypes

[django]

check

compilemessages

createcachetable 使用设置文件中的信息创建与数据库高速缓存后端一起使用的高速缓存表

dbshell 进入数据库的命令行

diffsettings 显示当前设置文件和Django默认设置(或所指定的另一个设置文件--default)之间的差异

dumpdata 导出数据库数据

flush 清空数据库

inspectdb 让本地的数据库生成models.py内的代码

loaddata 导入数据库数据

makemessages

makemigrations 生成数据库脚本(迁移文件)

migrate 同步数据库 这个和makemigrations是做数据库迁移,每次数据库有更改或者model有更改都需要操作

sendtestemail 向指定的收件人发送测试电子邮件,测试django是否能够发送邮件

shell django的shell命令行

showmigrations 显示项目中的所有数据迁移

sqlflush 打印将对该flush 命令执行的SQL语句

sqlmigrate

sqlsequencereset

squashmigrations

startapp 创建应用

startproject 创建项目

test 对所有已安装的应用程序运行测试

testserver runserver 使用自定义配置运行服务

[sessions]

clearsessions 可以作为cron作业运行,也可以直接清除过期的会话。

[staticfiles]

collectstatic

findstatic

runserver 启动django服务