• django进行数据库迁移的错误处理方法:You are trying to change the nullable field 'title' on book to non-nullable without a d


    参考文档:https://blog.csdn.net/liuxingxing_star/article/details/103995856

    数据库迁移的错误处理方法

    • 当执行 $ python3 manage.py makemigrations 出现如下迁移错误时的处理方法

      • 错误信息

        $ python3 manage.py makemigrations
        You are trying to change the nullable field 'title' on book to non-nullable without a default; we can't do that (the database needs something to populate existing rows).
        Please select a fix:
        1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
        2) Ignore for now, and let me handle existing rows with NULL myself (e.g. because you added a RunPython or RunSQL operation to handle NULL values in a previous data migration)
        3) Quit, and let me add a default in models.py
        Select an option: 
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
      • 翻译为中文如下:

        $ python3 manage.py makemigrations
        您试图将图书上的可空字段“title”更改为非空字段(没有默认值);我们不能这样做(数据库需要填充现有行)。
        请选择修复:
        1)现在提供一次性默认值(将对所有现有行设置此列的空值)
        2)暂时忽略,让我自己处理空值的现有行(例如,因为您在以前的数据迁移中添加了RunPython或RunSQL操作来处理空值)
        3)退出,让我在models.py中添加一个默认值
        选择一个选项:
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
      • 错误原因

        • 当将如下代码
        class Book(models.Model):
            title = models.CharField("书名", max_length=50, null=True)
        
        • 1
        • 2
        • 去掉 null=True 改为如下内容时会出现上述错误
        class Book(models.Model):
            title = models.CharField("书名", max_length=50)
        
        • 1
        • 2
        • 原理是 此数据库的title 字段由原来的可以为NULL改为非NULL状态,意味着原来这个字段可以不填值,现在改为必须填定一个值,那填什么值呢?此时必须添加一个缺省值。
      • 处理方法:

        1. 选择1 手动给出一个缺省值,在生成 bookstore/migrations/000x_auto_xxxxxxxx_xxxx.py 文件时自动将输入的值添加到default参数中
        2. 暂时忽略,以后用其它的命令处理缺省值问题(不推荐)
        3. 退出当前生成迁移文件的过程,自己去修改models.py, 新增加一个default=XXX 的缺省值(推荐使用)
    • 数据库的迁移文件混乱的解决办法

      1. 删除 所有 migrations 里所有的 000?_XXXX.py (__init__.py除外)
      2. 删除 数据库
        • sql> drop database mywebdb;
      3. 重新创建 数据库
        • sql> create datebase mywebdb default charset…;
      4. 重新生成migrations里所有的 000?_XXXX.py
        • python3 manage.py makemigrations
      5. 重新更新数据库
        • python3 manage.py migrate

    ---

  • 相关阅读:
    Dynamic proxy (good-原创)
    思维导图
    Android学习之 WebView使用小结
    shell语法简单介绍
    php反射类 ReflectionClass
    老鸟的Python新手教程
    腾讯云安装openvz,高速搭建測试环境
    NYOJ-1058 部分和问题
    NGUI ScrollView动态加入和删除对象。
    几种常见模式识别算法整理和总结
  • 原文地址:https://www.cnblogs.com/yaok430/p/14410573.html
Copyright © 2020-2023  润新知