Django更新models数据库结构步骤


Posted in Python onApril 01, 2020

有时候在我们使用Django设计了models中的数据库结构,并且已经同步了数据库之后,我们突然想在数据表中更新或者增加新的字段,也就是需要修改数据库的结构,会出现以下的问题:

C:\Users\Administrator\Desktop\Web开发\Django_Demo\jkxy>python manage.py makemigrations
You are trying to add a non-nullable field 'grade' to student without a default; we can't do that (the dat
abase 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) Quit, and let me add a default in models.py
Select an option:

就是在我们在models中修改了表的字段后,进行python manage.py makemigrations同步数据库时会出现上面报错,会导致数据库结构更新失败

解决方法如下:

第一种方式:先删除再重构

1、删除数据库对应的数据表

注意:在这里可以不用暴力删除数据表,可以利用django的migrations进行,操作如下:

1.1、首先将自己需要重构的数据表类的models注释掉,然后输入命令python manage.py makemigrations,这个时候migration会自动记录删除数据表的操作

Django更新models数据库结构步骤

Django更新models数据库结构步骤

1.2、然后在输入命令python manage.py migrate,Django会自动将本地对应的数据库进行删除

Django更新models数据库结构步骤

2、删除应用当中的migrations文件

3、删除应用当中的pychace文件

4、删除db_sqllite文件(若配置数据库为mysql时,可以删除db_sqllite)

5、建立一个空数据库,命令为python manage.py makemigrations --empty 应用名称

C:\Users\Administrator\Desktop\Web开发\Django_Demo\jkxy>python manage.py makemigrations --empty bbs
Migrations for 'bbs':
bbs\migrations\0001_initial.py

6、同步数据库:

python manage.py makemigrations
python manage.py migrate

 
C:\Users\Administrator\Desktop\Web开发\Django_Demo\jkxy>python manage.py makemigrations --empty bbs
Migrations for 'bbs':
 bbs\migrations\0001_initial.py
 
C:\Users\Administrator\Desktop\Web开发\Django_Demo\jkxy>python manage.py makemigrations
Migrations for 'bbs':
 bbs\migrations\0002_student_testmyfield.py
 - Create model Student
 - Create model Testmyfield
 
C:\Users\Administrator\Desktop\Web开发\Django_Demo\jkxy>python manage.py migrate
Operations to perform:
 Apply all migrations: admin, auth, bbs, contenttypes, sessions
Running migrations:
 Applying contenttypes.0001_initial... OK
 Applying auth.0001_initial... OK
 Applying admin.0001_initial... OK
 Applying admin.0002_logentry_remove_auto_add... OK
 Applying contenttypes.0002_remove_content_type_name... OK
 Applying auth.0002_alter_permission_name_max_length... OK
 Applying auth.0003_alter_user_email_max_length... OK
 Applying auth.0004_alter_user_username_opts... OK
 Applying auth.0005_alter_user_last_login_null... OK
 Applying auth.0006_require_contenttypes_0002... OK
 Applying auth.0007_alter_validators_add_error_messages... OK
 Applying auth.0008_alter_user_username_max_length... OK
 Applying bbs.0001_initial... OK
 Applying bbs.0002_student_testmyfield... OK
 Applying sessions.0001_initial... OK

第二种方式:直接在原结构上更新结构

#出版社
class Publisher(models.Model):
 '''出版社数据表'''
 id=models.AutoField(primary_key=True) #自增ID主键
 name=models.CharField(max_length=50,verbose_name='出版社名称',null=False,unique=True)
 
 def __str__(self):
  return '{},{}'.format(self.id,self.name)

接下来我们需要新增一个字段addr地址

#出版社
class Publisher(models.Model):
 '''出版社数据表'''
 id=models.AutoField(primary_key=True) #自增ID主键
 name=models.CharField(max_length=50,verbose_name='出版社名称',null=False,unique=True)
 addr=models.CharField(max_length=128,verbose_name='出版社地址')
 
 def __str__(self):
  return '{},{}'.format(self.id,self.name,self.addr)

由于我们的数据库的Publisher表本身已经有数据了,所以我们在进行python manage.py makemigrations会出现以下错误:

Django更新models数据库结构步骤

上图的意思是说addr没有默认值,无法更新到数据库中,然后给出了两个选项:

第一是让你马上给定一个默认值,然后一次性的把所有addr都写成这个值

第二是先退出,你自己在models里面去配置默认值

我选择先退出,在models中加上默认值,在进行makemigrations,这次就会更新成功了!

#出版社
class Publisher(models.Model):
 '''出版社数据表'''
 id=models.AutoField(primary_key=True) #自增ID主键
 name=models.CharField(max_length=50,verbose_name='出版社名称',null=False,unique=True)
 addr=models.CharField(max_length=128,verbose_name='出版社地址',default='成都市动物园')
 
 def __str__(self):
  return '{},{}'.format(self.id,self.name,self.addr)

Django更新models数据库结构步骤

让我们来检查数据库中的数据表:

Django更新models数据库结构步骤

可以看到数据结构发生了变化!

以上这篇Django更新models数据库结构步骤就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
Python中的下划线详解
Jun 24 Python
详解Python读取配置文件模块ConfigParser
May 11 Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
Nov 07 Python
详解安装mitmproxy以及遇到的坑和简单用法
Jan 21 Python
python适合人工智能的理由和优势
Jun 28 Python
Python使用sklearn库实现的各种分类算法简单应用小结
Jul 04 Python
Python实现TCP通信的示例代码
Sep 09 Python
Python configparser模块封装及构造配置文件
Aug 07 Python
python疲劳驾驶困倦低头检测功能的实现
Apr 04 Python
pycharm工具连接mysql数据库失败问题
Apr 01 #Python
利用Python自动化操作AutoCAD的实现
Apr 01 #Python
python使用信号量动态更新配置文件的操作
Apr 01 #Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 #Python
python自动脚本的pyautogui入门学习
Apr 01 #Python
Python自动重新加载模块详解(autoreload module)
Apr 01 #Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
Apr 01 #Python
You might like
php下删除一篇文章生成的多个静态页面
2010/08/08 PHP
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
微信小程序 wxapp地图 map详解
2016/10/31 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
pageGroup.js实现分页功能
2019/07/27 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
python3使用urllib示例取googletranslate(谷歌翻译)
2014/01/23 Python
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
2015/04/20 Python
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
python 判断是否为正小数和正整数的实例
2017/07/23 Python
python出现"IndentationError: unexpected indent"错误解决办法
2017/10/15 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
html5播放视频且动态截图实现步骤与代码(支持safari其他未测试)
2013/01/06 HTML / CSS
基于HTML5 Canvas的3D动态Chart图表的示例
2017/11/02 HTML / CSS
企业员工培训感言
2014/02/26 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
论群众路线学习笔记
2014/11/06 职场文书
超市工作总结范文2014
2014/12/19 职场文书
初中学生操行评语
2014/12/26 职场文书
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS
关于Vue中的options选项
2022/03/22 Vue.js