django项目数据库迁移过程记录及注意事项

前段时间,在对一个ajango的仓库项目进行了旧数据库的迁移。由于数据库的model发生了较大的变化,因此,迁移过程很小心,逐表进行。
步骤:
1.用新的数据库model进行migrate,保证字段相同。
2.然后导出excel表,手工修改正确。
3.在一个无人操作数据库的时间段,导入表格。


第一步,备份要导入的数据库。
# mysqldump -hrm-2zei290y0jssy27y5po.mysql.rds.aliyuncs.com -u aircos -p cmm  > backup_aircos_cmm_20171226.sql
第二步,新建立一个db,导入旧数据,在旧数据库基础上,用新的model来做migrate迁移。
删除migrations下面的迁移文件。仅保留__init__.py。
删除django migrate过程中建立的全部的auth_xxx, django_xxx表。否则无法再次migrate。
# python manage.py makemigrations
# python manage.py migrate
但我发现user表中的:    favorite_warehouse = models.ManyToManyField('cmm.Warehouse',
                                                through='cmm.UserFavorite',
                                                verbose_name='用户收藏仓库')
字段始终无法建立起来。
新建一个表,用新的模型来做migrate,这样也无法建立起来,看来是这个字段本身有问题。
PS:如果缺少了中间的migrations目录下面的过程迁移文件,那数据库就无法用django的办法来维护了。
只有导出数据,删除旧数据库,建立新数据库,重新做migrate,再导入旧数据。
第三步,
不能批量导出和导入,只有一张表一张表的导出和导入。
先备份:# mysqldump -hrm-2zei290y0jssy27y5po.mysql.rds.aliyuncs.com -u aircos -p cmm  > backup_aircos_cmm_20171226.sql
第一张表:user_company_info。
第二张表:user表。user_company_info_id字段进行手工关联。
此次只需要导入0:仓主和1:分仓用户这两种role的user。其它user删除。注意id号段要跟新库一致,不要冲突.
导入完后后,修改sys_increment_sequence表的user号段,否则新注册用户的号段会重复.
第三张表:user_role。如果这个用户没有角色的话,查询用户信息就要出错,帐号无法正常使用。
user与role要手工关联后再导入。
position表,user_position表不导. user_third_login没有用户信息,不用导.
第四张表: warehouse表. 先对比了新旧两张表的结构,是一致的。这样导入数据就方便了许多。
owner_id要对应上新的user_id。根据新旧user_id对照表来一一替换。
apply_number要接续上新号段(an10替换为an00,用保留号段)。
id用保留号段,WH10替换为WH00
第五张表:warehouse_commodity_classification
WH10替换为WH00。导入时,将自增的主键一列留空,否则生成新记录时,要出错。
第6张表:warehouse_express。表格列数一致,但排列顺序不同,不能直接按数据导入。
第7张表:warehouse_fire_fighting_equipment
第8张表:warehouse_material
第9张表:warehouse_service,表格列数相同,但排序顺序不同,inert into时,加上表名和列名。
总结一下:首先,最重要的事情是各表的primary-key的处理。这就涉及到同步修改sys表(产生唯一主键或索引用的表)。
比如warehouse表中,id和apply_number是由程序来生成的,如果不同步修改sys表,导入数据后,多了很多记录,以后新生成记录时,根据sys表自动
生成的id和apply_number会跟导入的数据重复,导致冲突。其次,父表先导入,这样才能有主键,子表才好使用。比如warehouse表,
owner_id是必须要的外键,关联user表。因此,必须要先导入user表。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草根大哥

进军大神程序员路上,谢谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值