开发web应用免不了,要和数据库打交道。 数据关系模型很重要 。 因此也遇到了 每次要同步数据库变更的难题。
Django 作为 轻量级的 python web 框架 相当优秀, 麻雀虽小五脏俱全
其中 models 模块开发相对简单直接, 他的migrate 功能设计恰好解决了 同步数据库变更的难题。
当在django 中 有 entity 继承 django.db.models.MODEL , 且对应的app 已经在setting里面注册,我们就可以使用migration 功能。
image.png
步骤大致如下:
- 配置数据源, 确保数据源可用
- python manage.py makemigrations #找到所有models的变更
- python manage.py migrate #根据models变更 生成对应数据库的变更,并在数据库同步执行
数据源的配置在setting.py 文件中,databases 部分,详情可以咨询官网文档
https://docs.djangoproject.com/en/2.0/ref/settings/#databases
很多时候, 由于我们有多个环境, 每个环境对应的变更顺序,或者权限都可能存在差异, 所以有的时候,要将对应并更的sql 获取到。
方案一
python manage.py sqlmigrate [appname] [migratename] #根据变更产生对应数据库的SQL
然而今天在获取SQL的过程中,却反复遇到如下错误。
image.png
分析报错,并实验,发现报错的原因是 添加了一个 models.BooleanField() 类型的字段
image.png
然而, 在执行 python manage.py migrate 可以执行成功、
方案二
遇到该问题,可以尝试执行 python manage.py migrate --fake
将生成的 migrations 文件在数据库 django_migrations 表里做标记
然后,找到还没有执行的 migrations 文件, 将django_migrations 对应的记录删除,
然后重新执行 python manage.py migrate 命令, 这样就会正常执行 未执行过的migratins文件
网友评论