zoukankan      html  css  js  c++  java
  • django迁移问题

    面试题1:migrate怎么判断哪些迁移脚本需要执行:
    他会将代码中的迁移脚本和数据库中django_migrations中的迁移脚本进行对比,如果发现数据库中,没有这个迁移脚本,那么就会执行这个迁移脚本。

    面试题2:migrate做了什么事情:
    将相关的迁移脚本翻译成SQL语句,在数据库中执行这个SQL语句。
    如果这个SQL语句执行没有问题,那么就会将这个迁移脚本的名字记录到django_migrations中。
    面试题3:执行migrate命令的时候报错的解决办法:
    原因:
    执行migrate命令会报错的原因是。数据库的django_migrations表中的迁移版本记录和代码中的迁移脚本不一致导致的。

    解决办法:
    使用–fake参数:
    首先对比数据库中的迁移脚本和代码中的迁移脚本。然后找到哪个不同,之后再使用--fake,将代码中的迁移脚本添加到django_migrations中,但是并不会执行sql语句。这样就可以避免每次执行migrate的时候,都执行一些重复的迁移脚本。

    终极解决方案:
    如果代码中的迁移脚本和数据库中的迁移脚本实在太多,就是搞不清了。那么这时候就可以使用以下终极解决方案:
    1. 终极解决方案原理:就是将之前的那些迁移脚本都不用了。重新来过。要将出问题的app下的所有模型和数据库中表保持一致,重新映射。
    2. 将出问题的app下的所有模型,都和数据库中的表保持一致。
    3. 将出问题的app下的所有迁移脚本文件都删掉。再在django_migrations表中将出问题的app相关的迁移记录都删掉。
    4. 使用makemigrations,重新将模型生成一个迁移脚本。
    5. 使用migrate --fake-initial参数,将刚刚生成的迁移脚本,标记为已经完成(因为这些模型相对应的表,其实都已经在数据库中存在了,不需要重复执行了。)
    6. 可以做其他的映射了。
    ---------------------
    作者:南窗客斯黄
    来源:CSDN
    原文:https://blog.csdn.net/nunchakushuang/article/details/80024753
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    POJ 3356 水LCS
    POJ 2250 (LCS,经典输出LCS序列 dfs)
    POJ 1080( LCS变形)
    整数划分问题之最大乘积
    进程调度之FCFS算法(先来先运行算法)
    c模拟银行家资源分配算法
    c模拟内存分配算法(首次适应算法,最佳适应算法,最坏适应算法)
    HDU 2602 Bone Collector(经典01背包问题)
    NYOJ 44 字串和 (最大字串和 线性dp)
    匈牙利游戏(codevs 1269)
  • 原文地址:https://www.cnblogs.com/rootid/p/10310430.html
Copyright © 2011-2022 走看看