【Python】Django删除数据迁移记录
find . -path "*migrations*" -name "*.py" -not -path "*__init__*" -exec rm {} \;
djang data migration
在使用django框架开发的过程中,我们不可避免的遇到models层的变更,就涉及到数据库表的变动,django给我提供了一个migration的工具来做这些数据库表的变更。
djang migration
如果不加appname,那么就是指所有包含migrations 目录的app
# 基于当前的model 检测修改,创建迁移策略文件
python manage.py makemigrations <appname>
# 执行迁移动作
python manage.py migrate
migrations失败
有时候如果models改动比较大,migrations会失败,这个时候有两种选择,手工去修改migrations文件,第二种是清除所有migrations,重新migrate
手工修改migrations文件
通过报错信息加上SQL语句找到找到问题,然后具体问题具体分析,是修改数据库里面的数据,还是修改migrations生成的脚本。
python manage.py migrate
python manage.py sqlmigrate <appname> 0001
当处理模型修改的时候:
-
如果模型包含一个未曾在数据库里建立的字段,Django会报出错信息。 当你第一次用Django的数据库API请求表中不存在的字段时会导致错误。
-
Django不关心数据库表中是否存在未在模型中定义的列。
-
Django不关心数据库中是否存在未被模型表示的table。
在使用SQLite3数据库时, 因为SQLite3 不支持删除列操作,只有有限地 ALTER TABLE 支持,所以修改数据库列的操作被新建表然后select into newtable 代替,所以会存在更多问题
参考
http://www.tuicool.com/articles/yM3IVr
NULL to NOT NULL
python manage.py makemigrations
You are trying to add a non-nullable field 'college' to majorproperty without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows)
2) Quit, and let me add a default in models.py
Select an option: 1
Please enter the default value now, as valid Python
The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now()
>>> 1
在migrate的时候提示你需要指定一个默认值,用以处理NULL的情况
清除migrations
清除所有app目录/migrations/下除__init__.py 文件之外的py文件
find . -path "*migrations*" -name "*.py" -not -path "*__init__*" -exec rm {} \;
squashmigrations
当migrations越来越多的时候执行 makemigrations 和 migrate 就会越来越慢,可以考虑对其瘦身(减少migrations文件的数量)
python manage.py squashmigrations schools 0002
数据导入导出
数据导出
django 项目提供了一个导出的方法 python manage.py dumpdata, 不指定 appname 时默认为导出所有的app
python manage.py dumpdata [appname] > appname_data.json
数据导入
数据导入,不需要指定 appname
python manage.py loaddata appname_data.json
优点:可以兼容各种支持的数据库,也就是说,以前用的是 SQLite3,可以导出后,用这种方法导入到 MySQL, PostgreSQL等数据库,反过来也可以。
缺点:数据量大的时候,速度相对较慢,表的关系比较复杂的时候可以导入不成功。
相关文章
- Python编写基于socket的非阻塞多人聊天室程序(单线程&多线程)
- 【华为OD机试真题 python】 字符串分割【2022 Q4 | 100分】
- Python 3.6学习笔记(一)
- 选择一个 Python Web 框架:Django vs Flask vs Pyramid
- Google Earth Engine(python)——为什么要学习 Django 而不是其他框架呢?
- python实现质因数分解算法
- 【Python】+Django+Vue+Element UI 实现前后端分离的web项目开发
- 【python】+json+解析数组json字符串(且键没有引号)(完美解决)
- ubuntu 16.04 python版本切换(python2和python3)
- 《Python密码学编程》——2.8 使用在线比较工具检查输入的代码
- 基于Python(Django )+VUE+MySQL实现多功能美颜 Web 应用【100010556】
- 基于Python(Django)+SQLite 实现(Web) 点菜管理系统【100010147】
- 「基于Python技术的智慧中医商业项目」Django前端系统配置
- 「基于Python技术的智慧中医商业项目」Django前端用户交互设计
- 「基于Python技术的智慧中医商业项目」Django后端新闻应用设计
- python如何将实例用作属性
- 《Python语言程序设计》——1.5 Python的历史
- 【Python】设计模式&异常
- Python学习---模拟微信网页登录180410
- Python学习---Django误删除sql表后,如何创建数据
- Python学习---Django的新工程设置模板
- Python学习---django知识补充之CBV
- Python学习---django之ORM的增删改查180125
- Python学习---django之Model语法180124
- Python学习---django模板语法180122
- 华为OD机试 - 数列还原(Python) | 机试题+算法思路+考点+代码解析 【2023】
- 华为OD机试 - 叠放书籍(Python) | 机试题+算法思路+考点+代码解析 【2023】
- 利用Python+Cocos2d制作《猫吃老鼠》小游戏
- 小学生python游戏编程arcade----是否全屏显示
- 小学生Python编程 ----- 打鸭子
- Python 框架 之 Anaconda 下 Django 环境的快速搭建与验证的相关说明
- Python 框架 之 Django 环境的搭建与简单使用的相关说明
- Python 爬虫 之 爬取百度贴吧内容的封装、输入贴吧主题即可对应爬取
- Python利用逐行读取readline()打印出现空行的解决办法
- 学会python这十个语言技法,让你有上手风范
- 猿创征文|最近抖音女友早安很火,那我也来跟个风,教程来咯(Python版)