一、认识ORM
1、概念:简单来说,就是用面向对象的方式去操作数据库的创建表以及增删改查等操作。
2、ORM的优点
- ORM使我们的通用数据库交互变得简单易行,完全不用考虑该死的SQL语句,实现快速开发
- 可以避免一些新手程序猿写SQL语句带来的性能问题
3、表与表之间的关系
表与表之间的关系主要分为:一对一、一对多、多对多
- 一对一:在主外键(foreign key)的关系基础上,给外键加了属性
一个班级有很多学生,他们分别有不同的学号。一个学生对应一个学号,一个学号对应一个学生;通过学号能找到学生,通过学生也能得到学号,不会重复。这里学生和学号的关系就是一对一
- 一对多:就是主外键关系(foreign key)
一个班级有很多学生,可是这个班级只有一个班主任。在这个班级中回随便找答一个人,就会知道他们的班主任是谁;知道了这个班主任就会知道有哪几个学生。这里班主任和学生的关系就是一对多。
- 多对多:自动创建第三张表(当然我们也可以自己创建第三张表:两个foreign key)
一个班级有很多学生,他们有语文课、数学课、英语课等很多课。一门课有很多人上,一个人上很多门课。这里学生和课程的关系就是多对多。
- 多对一:
比如说一个班级有很多学生,可是这个班级只有一个班主任。在这个班级中随便找一个人,就会知道他们的班主任是谁;知道了这个班主任就会知道有哪几个学生。这里学生和班主任的关系就是多对一。
例如:书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系,也被称作外键。
二、模型常用字段类型
-
CharField:字符串字段, 用于较短的字符串.
必要参数 maxlength, 用于从数据库层和Django校验层限制该字段所允许的最大字符数 -
IntegerField:用于保存一个整数.
-
FloatField:浮点数,必须的两个参数:
max_digits——总位数(不包括小数点和符号)
decimal_places——小数位数 -
BooleanField:A true/false field. admin 用 checkbox 来表示此类字段
-
TextField:一个容量很大的文本字段
-
EmailField:带有检查Email合法性的 CharField,不接受 maxlength 参数
-
DateField:日期字段,有两个非必须参数:
Argument 描述
auto_now 当对象被保存时,自动将该字段的值设置为当前时间.通常用于表示 “last-modified” 时间戳 -
ImageField:类似 FileField, 不过要校验上传对象是否是一个合法图片
-
FileField:文件上传字段,要求一个必须有的参数: upload_to
-
URLField: 用于保存 URL. 若 verify_exists 参数为 True (默认), 给定的 URL 会预先检查是否存在( 即URL是否被有效装入),没有返回404响应
三、数据表的增删改查
1、数据表记录的添加
def addbook(request):
# 第一种添加方法:实例化一个Book对象
# b=Book(name="python进阶",price=199,author="Lin",pub_date="2020-6-29")