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代码真的很爽
Aug 26 Python
Python时区设置方法与pytz查询时区教程
Nov 27 Python
python中sets模块的用法实例
Sep 30 Python
详解python开发环境搭建
Dec 16 Python
Python实现批量执行同目录下的py文件方法
Jan 11 Python
Python根据成绩分析系统浅析
Feb 11 Python
Python3内置模块之base64编解码方法详解
Jul 13 Python
详解Python3迁移接口变化采坑记
Oct 11 Python
Python hashlib模块实例使用详解
Dec 24 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
matplotlib 对坐标的控制,加图例注释的操作
Apr 17 Python
Python面向对象之成员相关知识总结
Jun 24 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 读取文件的正确方法
2009/04/29 PHP
PHP准确取得服务器IP地址的方法
2015/06/02 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
2017/06/28 PHP
Javascript延迟执行实现方法(setTimeout)
2010/12/30 Javascript
为Javascript中的String对象添加去除左右空格的方法(示例代码)
2013/11/30 Javascript
jquery的each方法使用示例分享
2014/03/25 Javascript
jQuery mobile 移动web(4)
2015/12/20 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
nuxt.js 缓存实践
2018/06/25 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
python实现360的字符显示界面
2014/02/21 Python
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
python3 拼接字符串的7种方法
2018/09/12 Python
Pandas DataFrame 取一行数据会得到Series的方法
2018/11/10 Python
使用Python在Windows下获取USB PID&VID的方法
2019/07/02 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
python与mysql数据库交互的实现
2020/01/06 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
生产部经理岗位职责
2013/12/16 职场文书
如何撰写岗位职责
2014/02/01 职场文书
创先争优活动心得体会
2014/09/04 职场文书
小学班主任评语
2014/12/29 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
Python Parser的用法
2021/05/12 Python
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs
MySQL 数据库范式化设计理论
2022/04/22 MySQL
box-shadow单边阴影的实现
2023/05/21 HTML / CSS