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连接mysql调用存储过程示例
Mar 05 Python
基于python socketserver框架全面解析
Sep 21 Python
浅谈python函数之作用域(python3.5)
Oct 27 Python
对python中for、if、while的区别与比较方法
Jun 25 Python
python实现自动登录后台管理系统
Oct 18 Python
python pygame实现方向键控制小球
May 17 Python
Python + OpenCV 实现LBP特征提取的示例代码
Jul 11 Python
python多线程使用方法实例详解
Dec 30 Python
Tensorflow:转置函数 transpose的使用详解
Feb 11 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
Apr 08 Python
calendar在python3时间中常用函数举例详解
Nov 18 Python
Python下opencv使用hough变换检测直线与圆
Jun 18 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
快速配置PHPMyAdmin方法
2008/06/05 PHP
一步一步学习PHP(3) php 函数
2010/02/15 PHP
PHP学习之字符串比较和查找
2011/04/17 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
为javascript添加String.Format方法
2020/08/11 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
angularJs使用ng-repeat遍历后选中某一个的方法
2018/09/30 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
python 提取文件的小程序
2009/07/29 Python
python实现的登录和操作开心网脚本分享
2014/07/09 Python
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
Python中序列的修改、散列与切片详解
2017/08/27 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
2019/10/28 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
经济信息系毕业生自荐信范文
2014/03/15 职场文书
跳蚤市场口号
2014/06/13 职场文书
科技节口号
2014/06/19 职场文书
汽车销售助理岗位职责
2015/04/14 职场文书
Node-Red实现MySQL数据库连接的方法
2021/08/07 MySQL