zoukankan      html  css  js  c++  java
  • Django migrations 重命名

    1:如果migrations文件中想要重命名文件,重命名后有一次修改models文件,再次执行pythonmanage.py  makegirations ******,再次执行migrate的时候发现报错了,在我往后的时候修改models里面的内容,只能执行makegirations命令,但是执行migrate的时候总是报错,这个时候也不能回退

    解决方案:

      查看报错窗口,找到报错的文件,执行(加参数 -fake)

     
    $ python manage.py migrate 0003 --fake

    原文参考:http://stackoverflow.com/questions/31374010/adding-a-column-in-south-gives-error

    2:重命名migrations文件

      2_1当修改models文件的时候,执行python manage.py makemigrations blogapp 命令

      2_2:此时生成migrations文件,这个时候可以重命名

      2_3:执行python manage.py migrate blogapp

      注释:如果顺序错误也不能回退 ,可以使用方法1解决

    3:合并migrations文件

      在没有错误的情况下,执行python manage.py migrate blog 0001,回退到文件0001,

       0001下的文件可以删除,一次在执行makemigrations ,migrate

    4:新建空的migrations 文件

      

    <------------------------------------------------------------------------------------------------------------------------------------------------------------->

    Django开发—如何重置migration

    情景一:不需要原有的数据库数据

    1. 删除数据库所有的表
    2. 删除项目的migration模块中的所有 文件,除了init.py 文件
    3. 执行脚本
      python manage.py makemigrations
      python manage.py migrate

    情景2:不想要删除现有的数据库,只是想重新建立 migration 文件

    1. 首先要保证,目前的migration文件和数据库是同步的,通过执行

      Python manage.py makemigrations
      如果看到 这样的提示: No changes detected,则可以继续接下来的步骤

    2. 通过执行

      python manage.py showmigrations
      结果,可以看到当前项目,所有的app及对应的已经生效的migration文件如

    git_hook
     [X] 0001_initial
    guardian
     [X] 0001_initial
    kombu_transport_django
     [X] 0001_initial
    message
     (no migrations)
    order
     [X] 0001_initial
    pay
     [X] 0001_initial
     [x] 0002_add_model
    sessions
     [X] 0001_initial
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    通过执行

    $ python manage.py migrate –fake pay zero

    这里的 pay就是你要重置的app
    之后再执行 python manage.pu showmigrations,你会发现 文件前的 [x] 变成了[ ]

    现在,你可以删除pay 这个 app下的migrations模块中 除 init.py 之外的所有文件。

    之后,执行

    $ python manage.py makemigrations

    程序会再次为这个app 生成 0001_initial.py 之类的文件

    最重要的一步来了, 执行

    python manage.py migrate –fake-inital

    –fake-inital 会在数据库中的 migrations表中记录当前这个app 执行到 0001_initial.py ,但是它不会真的执行该文件中的 代码。
    这样就做到了,既不对现有的数据库改动,而又可以重置 migraion 文件,妈妈再也不用在 migration模块中看到一推文件了。

  • 相关阅读:
    java四种线程池类型以及可选择的阻塞队列
    复习-java向上转型
    synchronized 加在方法和代码块底层实现区别
    synchronized 和 lock 的区别
    hashmap-put方法过程
    mybatis-防止sql注入
    synchronized-粗略过程
    消息队列-观察者模式和发布订阅模式区别
    复习-进程的调度算法
    Chocolatey
  • 原文地址:https://www.cnblogs.com/zknublx/p/6149854.html
Copyright © 2011-2022 走看看