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原始套接字编程示例分享
Feb 21 Python
用python写一个windows下的定时关机脚本(推荐)
Mar 21 Python
pandas全表查询定位某个值所在行列的方法
Apr 12 Python
Python实现的爬取网易动态评论操作示例
Jun 06 Python
python 除法保留两位小数点的方法
Jul 16 Python
python实现简单登陆系统
Oct 18 Python
Python动态导入模块和反射机制详解
Feb 18 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
Apr 08 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
Jun 18 Python
如何一键升级Python所有包
Nov 05 Python
Python爬虫之Selenium库的使用方法
Jan 03 Python
Python中json.dumps()函数的使用解析
May 17 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与SQL语句常用大全
2016/12/10 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
javascript 动态添加事件代码
2008/11/30 Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
2013/03/04 Javascript
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
JavaScript数据类型之基本类型和引用类型的值
2015/04/01 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
2016/02/14 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
JavaScript语法约定和程序调试原理解析
2020/11/03 Javascript
以一段代码为实例快速入门Python2.7
2015/03/31 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
2017/03/12 Python
pandas 对每一列数据进行标准化的方法
2018/06/09 Python
python 拼接文件路径的方法
2018/10/23 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
抽象类和接口的区别
2012/09/19 面试题
医学院毕业生自荐信
2013/11/08 职场文书
初三学习决心书
2014/03/11 职场文书
2015年大学团支部工作总结
2015/05/13 职场文书
公司仓库管理制度
2015/08/04 职场文书
2016猴年开门红标语口号
2015/12/26 职场文书
护理培训心得体会
2016/01/22 职场文书
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python
python如何查找列表中元素的位置
2022/05/30 Python