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抓取某汽车网数据解析html存入excel示例
Dec 04 Python
在Python中封装GObject模块进行图形化程序编程的教程
Apr 14 Python
python爱心表白 每天都是浪漫七夕!
Aug 18 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
Nov 29 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
Jul 18 Python
Python Pandas 箱线图的实现
Jul 23 Python
Python封装成可带参数的EXE安装包实例
Aug 24 Python
浅谈python的elementtree模块处理中文注意事项
Mar 06 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
Mar 19 Python
python的json包位置及用法总结
Jun 21 Python
OpenCV利用python来实现图像的直方图均衡化
Oct 21 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 for 循环语句使用方法详细说明
2010/05/09 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
js以对象为索引的关联数组
2010/07/04 Javascript
jquery下将选择的checkbox的id组成字符串的方法
2010/11/28 Javascript
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
深入浅出理解javaScript原型链
2015/05/09 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
2015/06/10 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
js实现简单的二级联动效果
2017/03/09 Javascript
JavaScript canvas基于数组生成柱状图代码实例
2020/03/06 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
python基础while循环及if判断的实例讲解
2017/08/25 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
Python过滤序列元素的方法
2020/07/31 Python
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
写好自荐信的要点
2013/11/06 职场文书
建筑施工员岗位职责
2013/11/26 职场文书
父亲的菜园教学反思
2014/02/13 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
英文自荐信范文
2015/03/25 职场文书
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技