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 相关文章推荐
flask使用session保存登录状态及拦截未登录请求代码
Jan 19 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
Apr 27 Python
python使用turtle库绘制时钟
Mar 25 Python
解决pandas .to_excel不覆盖已有sheet的问题
Dec 10 Python
Python中如何导入类示例详解
Apr 17 Python
django 快速启动数据库客户端程序的方法示例
Aug 16 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
Aug 30 Python
如何使用selenium和requests组合实现登录页面
Feb 03 Python
python 按钮点击关闭窗口的实现
Mar 04 Python
基于python计算并显示日间、星期客流高峰
May 07 Python
pycharm 添加解释器的方法步骤
Aug 31 Python
Visual Studio Code搭建django项目的方法步骤
Sep 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
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
PHP的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
Linux下手动编译安装PHP扩展的例子分享
2014/07/15 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
Array.prototype 的泛型应用分析
2010/04/30 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
跟我学习javascript的浮点数精度
2015/11/16 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
2016/10/10 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
详解Vue2.0里过滤器容易踩到的坑
2017/06/01 Javascript
JS计算两个时间相差分钟数的方法示例
2018/01/10 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
如何安装控制器JavaScript生成插件详解
2018/10/21 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
2018/12/11 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
[01:00:11]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第一场 2月7日
2021/03/11 DOTA
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
Python如何生成树形图案
2018/01/03 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
Python实现分段线性插值
2018/12/17 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
Python timeit模块的使用实践
2020/01/13 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
不同浏览器创建XMLHttpRequest方法有什么不同
2014/11/17 面试题
小学数学国培感言
2014/03/10 职场文书
婚礼主持词开场白
2014/03/13 职场文书
优秀应届毕业生自荐书
2014/06/29 职场文书
六查六看心得体会
2014/10/14 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
解析原生JS getComputedStyle
2021/05/25 Javascript