Django在迁移数据库数据时一些方法步骤,以及在导出安全删除数据时的处理方法
清空数据表
python manage.py flush使用Django框架的倒入导出
python manage.py dumpdata [APP_NAME] > [EXPOER_FILE_NAME]
python manage.py loaddata [EXPOER_FILE_NAME]
不指定应用名称则会导出所有数据表,包括一些系统数据表
所以在导出时尽量只指定有关业务应用的名称
例如:
有personnels和customers两个应用要导出数据时
python manage.py dumpdata personnels customers > data.json导入数据
python manage.py loaddata data.json当使用安全删除策略时可能面临的导出问题
若业务删除操作写的很标准,关联数据都可以逻辑删除的话,执行上述导出导入就可以实现数据的迁移
但时可能由于业务复杂,表关联复杂,导致一些数据逻辑删除后,其关联表数据还在。这样在执行原来导出时,那些逻辑删除的数据会导不出来,在执行导入时就会导致某些PK找不到数据如下解决方法是修改框架对于数据查询的代码,将所有数据,包括逻辑删除的数据一并导出
修改框架manager.py的get_queryset函数中的将safedelete_visibility修改为DELETE_VISIBLE
1
queryset._safedelete_visibility = DELETED_VISIBLE
然后执行导出命令
说明:
在寻找解决方法的过程实际上是想到python manage.py dumpdata命令也是要查询数据的,万变不离其宗,他一定会去查数据表中的数据,也一定是通过sql语句查询的,未修改框架代码时,他默认是过滤掉了逻辑删除的数据,所以这里只要找到调用数据库查询的接口,把逻辑删除查询命令改掉就可以,经过查找就是这个了。