Django框架提供的模块
Django 框架向我们提供了丰富的模块,避免程序员在开发的过程中重复“造轮子”,提高了开发者的工作效率。
ORM
对象关系映射,它是一种基于关系型数据库的程序技术。ORM 允许你使用类和对象对数据库进行操作,这大大提高了对数据库的控制,避免了直接使用 SQL 语句对数据库进行操作。
ORM 把类映射成数据库中的表,把类的一个实例对象映射成数据库中的数据行,把类的属性映射成表中的字段,通过对象的操作对应到数据库表的操作,实现了对象到 SQL、SQL 到对象转换过程。
Django中定义数据表
ORM 把类映射成数据库中的表。
Django中模型类是数据交互的接口,一个模型类代表数据库中的一张数据表,模型类中每一个类属性都代表数据表中的一个字段。
模型类本质上属于一个 Python 类,只不过在 Django 中称之为做模型类 ,他需要继承自django.db.models中的 Model 类
Django 中模型类就相当于 ORM 模块
定义一个用户信息表,有2个字段name和password
from django.db import models
#使用 from django.db import models 导入 models 模块;
class UserInfo(models.Model):
#使用 class 关键字对 UserInfo 表进行类定义,并继承了models 模块中的 Model 类;
name = models.CharFiled(max_length=100)
password = models.CharFiled(max_length=100)
#表中的字段 name 和 password 是 UserInfo 类的属性,name 和 password 字段类型都是 CharFiled,字段长度均是100。
Django中类的属性代表数据表中的一个字段,针对数据库中的字段类型,Django ORM都有对应的“xxxFileld”来表示。
常用的字段类型:
字段 | 说明 | 属性 |
---|---|---|
AutoFiled | 默认自增主键(Primary_key=Ture),Django 默认建立id字段为主键。 | |
CharFiled | CharFiled | Max_length=32,字符长度需要明确 |
IntgerFiled | 整型 int | |
DateFiled | 年月日时间类型 | auto_now=True,数据被更新就会更新时间 ;auto_now_add=True,数据第一次参数时产生。 |
DateTimeFiled | 年月日小时分钟秒时间类型 | auto_now=True,数据被更新就会更新时间; auto_now_add=True,数据第一次参数时产生。 |
DecimalFiled | 混合精度的小数类型 | max_digits=3,限定数字的最大位数(包含小数位);decimal_places=2,限制小数的最大位数。 |
BooleanFiled | 布尔字段,对应数据库 tinyint 类型数据长度只有1位。 | 值为True或False |
TextFiled | TextFiled |
Django ORM管理器对象
ORM 把类映射成数据库中的表,把类的一个实例对象映射成数据库中的数据行,把类的属性映射成表中的字段。
每个继承自 models.Model 的模型类,都会有一个 objects 对象被同时继承下来,这个对象就叫做“管理器对象”,数据库的增删改查可以用 objects 管理器对象来实现。
在数据表中增加一行数据
UserInfo.objects.create(name='jay',password='abc123')
上面代码插入一条名字是“jay”,密码是“abc123”的数据。
更改表中的字段,用save()
Obj=UserInfo(name="jay",password="abc123")
Obj.name="john"
Obj.save()
上述代码中 name 属性值会被赋值为“john”,最后调用 save()方法保存。
数据表增删改查示例
UserInfo.objects.all()#查询表中的所有记录
UserInfo.objects.filter(name_contains='j')#查询表中name含有“j”的所有记录,被使用较多
UserInfo.objects.get(name="john")#有且只有一个查询结果,如果超出一个或者没有,则抛出异常
UserInfo.objects.get(name="john").delete()#删除名字为john的记录
UserInfo.objects.get(name="john").update(name='TOM')#更新数据表的name为TOM