Django中的ORM框架使用小技巧
Django中的ORM框架使用小技巧
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
Django对各个数据提供了很好的支持,包括PostgreSQL,MySQL,SQLite和Oracle,而且为这些数据库提供了统一的调用API,这些API统称为ORM框架。通过使用Django内置的ORM框架可以实现数据库和读写操作。
一.ORM介绍
1>.什么是ORM
ORM框架是一种程序技术,用户实现面向对象编程语言中不同类型系统的数据之间的转换。从效果上说,其实是创建了一个可在编程语言中使用的“虚拟对象数据库”,通过对虚拟对象数据库操作从而实现对目标数据库的操作,虚拟对象数据库与目标数据库是相互对应的。在Django中,虚拟对象数据库也称为模型,通过模型是爱你对目标数据库的读写操作。
2>.ORM能做的啥事情
第一:操作数据表(包括创建表,删除表和修改表);
第二:操作数据行(对数据的增删改查);
注意,ORM不能创建数据库,需要我们手动创建对应的 数据库,建议将数据库的字符编码设置为utf8.
3>.使用Django的ORM详细步骤
第一:自己手动创建数据库;
第二:在Django项目中配置链接数据库的相关配置(在Django项目中的setting.py中设置);
第三:Django用什么链接数据库,Django默认是使用MySQLDB。(Django2.0以下版本是不支持python3的,他们在兼容性上还有写问题,但是并不是说python3不能使用Django的ORM,我们需要稍微做一下调整即可,如果使用python3.6以上版本的话,我们可以使用pymysql模块来替代默认的MySQLDB链接驱动。);
第四:在我们项目中的应用模块中找到对应的models.py文件,在这里面创建一个类,这个类必须得继承“model.Model”;
第五:创建好类后,我们需要在项目目录下手动执行“python manage.py makemigrations”(将你每次在model.py修改的操作在“migrations”目录中记录下来并生成对应的文件,比如“0001_initial.py”)和“python manage.py migrate”(翻译你在model.py中的定义的SQL语句并执行!)
接下来我们会详细剖析一下ORM的使用,此处我们使用ORM是针对Django 1.11.11这个版本,后期我会更新一片关于Django.2.1.4这个版本的使用,其实2在用法中差异不大。如果时间允许的话,我会一一给大家分享出来的。
二.Django使用ORM创建数据表
1>.配置Django链接的数据库为Mysql

2>.编辑项目路径下的“__init__.py”,添加如下图所示的内容

3>.编写models.py 配置文件

4>.执行建表语句

5>.查看“yinzhengjie”数据库中的表信息

6>.查看ORM建表语句后的数据信息

三.Django ORG操作数据表-删除表
1>.在model.py中定义的类注视掉即可!如下图所示:

2>.在项目中执行“python manage.py makemigrations”(通知项目你已经修改了model.py文件)

3>.执行“python manage.py migrate”(将python代码翻译成SQL语句执行!)

四.Pycharm 链接MySQL工具的使用
1>.点击“Database”

2>.选择需要链接的数据库

3>.下载驱动,如下图所示,点击蓝色的“Download”按钮

4>.链接数据库测试

5>.查看某个表中的数据(我自己把之前删除的那个表给还原了)

6>.往某张表中添加数据

7>.再次查看表中的信息

Django中的ORM框架使用小技巧的更多相关文章
- 在Django中使用ORM创建图书管理系统
一.ORM(对象关系映射) 很多语言的web框架中都有这个概念 1. 为什么要有ORM? 1. 写程序离不开数据,要使用数据就需要连接数据库,但是不同的数据库在sql语句上(mysql,oracle等 ...
- django中的ORM介绍和字段及字段参数
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
- Django中的ORM介绍,字段以及字段的参数。
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
- 将keras模型在django中应用时出现的小问题——ValueError: Tensor Tensor("dense_2/Softmax:0", shape=(?, 8), dtype=float32) is not an element of this graph.
本文原出处(感谢作者提供):https://zhuanlan.zhihu.com/p/27101000 将keras模型在django中应用时出现的小问题 王岳王院长 10 个月前 keras 一个做 ...
- Django 中得ORM介绍和字段及字段参数
ORM 介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说 ORM 是通过使用 ...
- django中的ORM与 应用与补充
目录 django中的ORM与 应用与补充 ORM与数据的对应关系 ORM 常用字段 ORM 其他字段 自定义字段 字段参数 Model Meta参数 常用13中查询(必会) 单表查询的双下划线应用 ...
- 细数.NET 中那些ORM框架 —— 谈谈这些天的收获之一
细数.NET 中那些ORM框架 —— 谈谈这些天的收获之一(转) ADO.NET Entity Framework ADO.NET Entity Framework 是微软以 ADO.N ...
- Django中的ORM进阶操作
Django中的ORM进阶操作 Django中是通过ORM来操作数据库的,通过ORM可以很easy的实现与数据库的交互.但是仍然有几种操作是非常绕也特别容易混淆的.于是,针对这一块,来一个分类总结吧. ...
- Django中使用bookstarp框架(4)
Django中使用bookstarp框架(4) 注意:要使用bookstarp框架前,要先有css的基础 因为主要是研究后台的使用方法,就引入前端的框架,简化html上的耗时(主要是不想把时间浪费在前 ...
随机推荐
- 免费开源的会计软件 GnuCash 3.4 发布
导读 GnuCash 3.4已经发布,GnuCash是免费和开源的会计软件.GnuCash开发团队宣布推出GnuCash 3.4,这是3.x稳定版系列的第五版. 变化 在3.3和3.4之间,完成了以下 ...
- 用递归方法解决汉诺塔问题(Recursion Hanoi Tower Python)
汉诺塔问题源于印度的一个古老传说:梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.梵天命令婆罗门把圆盘按大小顺序重新摆放在另一根柱子上,并且规定小圆盘上不能放 ...
- 【XSY1591】卡片游戏 DP
题目描述 有标有数字为\(1\)~\(9\)的卡片各\(a_1,a_2\cdots a_9\)张,还有标有乘号的卡片\(m\)张.从中取出\(n\)张按任意顺序排列,取出两个乘号相邻和乘法在边界上的非 ...
- 【XSY2469】graph 分治 并查集
题目大意 给你一张\(n\)个点\(m\)条边的无向图,问删去每个点后,原图是不是二分图. \(n,m\leq 100000\) 题解 一个图是二分图\(\Longleftrightarrow\)该图 ...
- crawlspider_房多多
框架写起来代码是真的简洁多了,还有就是在requests爬取房多多的时候,无法爬取所有地区,而这个就不受影响 代码请查看码云 运行结果:
- 【BZOJ4832】抵制克苏恩(矩阵快速幂,动态规划)
[BZOJ4832]抵制克苏恩(矩阵快速幂,动态规划) 题面 BZOJ 题解 一模一样 #include<iostream> #include<cstdio> using na ...
- rt-thread 低优先级线程挂起高优先级线程失败
@2019-01-13 [小记] 使用rt-thread线程管理功能时,低优先级线程挂起高优先级线程失败,高优先级线程或同等优先级线程挂起低优先级线程则成功.
- 0-1背包 VIOJ1025
P1025小飞侠的游园方案 请 登录 后递交 标签:[显示标签] 描述 菜虫:你的题目是--我们的情报组织探听到敌人的重要将领--小飞侠星期天会邀他的灵儿妹妹到公园去玩.公园里有很多娱乐项目,可并不是 ...
- [AH2017/HNOI2017]礼物(FFT)
题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在她生日的前一 ...
- [ZJOI2006]超级麻将(可行性dp)
题目描述 要判断某人是否胡牌,显然一个弱智的算法就行了,某中学信息学小组超级麻将迷想了想,决定将普通麻将改造成超级麻将. 所谓超级麻将没有了砣.索.万的区分,每种牌上的数字可以是1~100,而每种数字 ...