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小程序来统计测试脚本的关键字
Mar 12 Python
Python手机号码归属地查询代码
May 04 Python
Python 稀疏矩阵-sparse 存储和转换
May 27 Python
Python面向对象编程基础解析(一)
Oct 26 Python
Python学习之用pygal画世界地图实例
Dec 07 Python
Python使用pylab库实现绘制直方图功能示例
Jun 01 Python
更新修改后的Python模块方法
Mar 03 Python
使用python实现哈希表、字典、集合操作
Dec 22 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
Nov 28 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
Jan 25 Python
Python的flask接收前台的ajax的post数据和get数据的方法
Apr 12 Python
Python实现打乒乓小游戏
Sep 25 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 jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
简单的php数据库操作类代码(增,删,改,查)
2013/04/08 PHP
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
php判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
PHP中Fatal error session_start()错误解决步骤
2014/08/05 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
js 处理URL实用技巧
2010/11/23 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
彻底理解js面向对象之继承
2018/02/04 Javascript
js中apply()和call()的区别与用法实例分析
2018/08/14 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
python 禁止函数修改列表的实现方法
2017/08/03 Python
python中实现k-means聚类算法详解
2017/11/11 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
关于python之字典的嵌套,递归调用方法
2019/01/21 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
2020/06/02 Python
python爬虫智能翻页批量下载文件的实例详解
2021/02/02 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
房屋买卖协议书范本
2014/04/10 职场文书
五年级上册复习计划
2015/01/19 职场文书
2015年学校教研室主任工作总结
2015/07/20 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
详解如何使用Nginx解决跨域问题
2022/05/06 Servers