当前位置: 首页 > news >正文

Backend - Django makemigrations

目录

一、迁移命令

(一)前提

(二)生成迁移文件

(三)执行迁移

二、迁移问题

1. Error:No changes detected

2. Error:You are trying to add a non-nullable field 'XXX' to XXX without a default 

解决方法(1)根据系统提供的选项,选择1

解决方法(2)根据系统提供的选项,选择2

        ① 增加 null = True 属性

        ② 增加 default = " "  属性

        ③ 删除有问题的model

        ④ 检查migrations文件

3. Error:django.db.utils.OperationalError: connection to server at "10.XXX.X.X", port 5432 failed: FATAL:  password authentication failed for user "XXX"

4. Error:File "D:\XXX\venv368\lib\site-packages\django\db\migrations\operations\models.py", line 677, in state_forwards。model_state = state.models[app_label, self.name_lower]。KeyError: ('luoboapp', 'Book')

原因:

解决:

5. File "D:\XXX\venv368\lib\site-packages\django\db\backends\utils.py", line 84, in _execute。return self.cursor.execute(sql, params)。django.db.utils.IntegrityError: column "author_id_id" of relation "Book" contains null values

原因:

解决:


一、迁移命令

(一)前提

        若是修改 / 新增 表结构,需先保证原来产生的迁移文件还保留着。

(二)生成迁移文件

# 终端执行
python manage.py makemigrations BookApp# 其中,BookApp是Application专案名,方便找到唯一的models.py文件
# Application具体是在settings.py文件中设置的。即:INSTALLED_APPS = ['BookApp']

(三)执行迁移

# 终端执行
python manage.py migrate

二、迁移问题

1. Error:No changes detected

        原因:未指定执行的Application。

        解决如下:

# 终端执行
# 1.这是遇到问题的终端命令
python manage.py makemigrations BookApppython manage.py migrate# 2.这是修改过后的终端命令
python ./manage.py makemigrations BookApppython manage.py migrate

2. Error:You are trying to add a non-nullable field 'XXX' to XXX without a default 

解决:

解决方法(1)根据系统提供的选项,选择1

        选择1,则代表系统自动设置默认属性,并让用户提供一个默认值。

        即,操作:先输入1,回车,再输入任意值,回车。

        若还有其他栏位也是出现这种情况,继续选择1,输入默认值。

解决方法(2)根据系统提供的选项,选择2

        选择2,则用户自定义设置。

        即,操作:输入2,直接退出。

        输入2退出指令后,再接着用以下其一操作来解决:

        ① 增加 null = True 属性

                操作:给字段添加允许为空的属性,下指令,然后恢复字段,又下指令(该操作类似于系统选项1的解决办法)。

        ② 增加 default = " "  属性

                操作:给字段添加默认值的属性,下指令,然后恢复字段,又下指令。

        ③ 删除有问题的model

                操作:删除该model,下指令,然后恢复model,又下指令。

        ④ 检查migrations文件

                注意:若确定栏位没有问题,则确保之前的migrations文件没有问题。

3. Error:django.db.utils.OperationalError: connection to server at "10.XXX.X.X", port 5432 failed: FATAL:  password authentication failed for user "XXX"

        解决:确保项目settings.py文件上设置的数据库 'USER' 和 'PASSWORD' 的值,与在 PostgreSQL数据库 中创建的用户名和密码匹配。

4. Error:File "D:\XXX\venv368\lib\site-packages\django\db\migrations\operations\models.py", line 677, in state_forwards。model_state = state.models[app_label, self.name_lower]。KeyError: ('luoboapp', 'Book')

原因:

该model(如Book)被其他model(如Library)进行了外键关联,在其他model有一些栏位的变动并下迁移指令时,会寻找该model(如Book)。

若该model(如Book)此时已经重命名了(系统在最后才会更新该model名,如LuoboBook,而其他model关联的是旧该model名,如Book),则其他model就找不到该model(如LuoboBook),则会报错。

解决:

在执行迁移文件时,选择不要重新命名Book模型名。输入N。

如 Did you rename the luoboapp.Book model to LuoboBook? [y/N] N

再操作:把model还原成以前的model名(如Book)。再删掉新生成的migration文件,重新下指令。生成新的migration文件后,再将model名改成新名字(如LuoboBook)。再下指令,生成第二个新的migration文件。然后就能成功执行migrate。

5. File "D:\XXX\venv368\lib\site-packages\django\db\backends\utils.py", line 84, in _execute。return self.cursor.execute(sql, params)。django.db.utils.IntegrityError: column "author_id_id" of relation "Book" contains null values

原因:

        该model有新增的字段,但是该model对应的数据库表还存在原来的数据记录。

解决:

        清空该model对应的表的所有数据。

以上大部分问题是数据库同步有误、或migrations文件有冲突。

若实在找不到方法解决类似问题,则使用简单粗暴的方法。

即,把migrations文件夹的所有py文档删除(除了__init__.py),再把数据库删除重新创建。若担心操作有误,可以提前备份。

相关文章:

  • es常用查询编辑
  • SpringBoot集成i18n(多语言)
  • 精密制造ERP系统包含哪些模块?精密制造ERP软件是做什么的
  • java使用xstream框架生成xml文件
  • 5.【自动驾驶与机器人中的SLAM技术】2D点云的scan matching算法 和 检测退化场景的思路
  • Unity中Shader编译目标渲染器
  • Java转Go学习之旅 | Go入门(2)
  • Java零基础-if条件语句
  • 雷军:我的程序人生路
  • JS的监听事件
  • 企业微信协议开发,API接口调用
  • 操作系统——进程同步
  • Linux chfn命令教程:如何更改和管理用户的finger信息(附案例详解和注意事项)
  • 【微软技术栈】与其他.NET语言的互操作性 (C++/CLI)
  • 移动端APP自动化测试框架-UiAutomator2基础
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【面试系列】之二:关于js原型
  • JavaScript 基础知识 - 入门篇(一)
  • JS函数式编程 数组部分风格 ES6版
  • JWT究竟是什么呢?
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • node和express搭建代理服务器(源码)
  • webpack+react项目初体验——记录我的webpack环境配置
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 基于游标的分页接口实现
  • 近期前端发展计划
  • 精彩代码 vue.js
  • 两列自适应布局方案整理
  • 使用 QuickBI 搭建酷炫可视化分析
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • # 透过事物看本质的能力怎么培养?
  • $().each和$.each的区别
  • %check_box% in rails :coditions={:has_many , :through}
  • (分布式缓存)Redis哨兵
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • .net 4.0发布后不能正常显示图片问题
  • .Net程序帮助文档制作
  • .NET文档生成工具ADB使用图文教程
  • ??eclipse的安装配置问题!??
  • []串口通信 零星笔记
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [Android Studio 权威教程]断点调试和高级调试
  • [APUE]进程关系(下)
  • [AutoSar]BSW_Com02 PDU详解
  • [codevs 2822] 爱在心中 【tarjan 算法】
  • [Docker]十.Docker Swarm讲解
  • [DP 训练] Longest Run on a Snowboard, UVa 10285
  • [element-ui] el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案
  • [fsevents@^2.1.2] optional install error: Package require os(darwin) not compatible with your platfo
  • [hdu4622 Reincarnation]后缀数组
  • [IE9] GPU硬件加速到底是实用创新还是噱头
  • [JS入门到进阶] 哎,被vite小坑了一波,大家记得配置build.cssTarget为‘chrome61‘
  • [leetcode 双指针]
  • [LeetCode] 19. 删除链表的倒数第 N 个结点