Django的基本使用

本文详细介绍了Django中如何创建数据库、执行级联查询以及定义模型。通过实例展示了如何通过Student获取Grade信息,反之亦然。还讲解了Django Models的各种字段类型及其选项,如BooleanField、AutoField等,并提供了查询条件和操作,如filter、exclude、get等。此外,文章还提及了F表达式和Q对象的使用,以及如何自定义Manager进行查询集的筛选。
摘要由CSDN通过智能技术生成

数据操作:

  • 创建数据库:

    • mysql -uroot -p123456

    • create database xxx charset=utf8;

1、级联查询

一对多:

#通过学生获取班级信息
student = model.Student.objects.get(pk=1)
grade = student.s_grade

#通过班级获取所有学生信息
grade = model.Grade.objects.get(pk=1)
students = grade.student_set.all()

2、Models 定义

导入from django.db import models

在models中class里面加上

class Meta:
db_table = ‘new_name’

可以自己定义数据库表名

创建对象方案:

在模型类中增加类方法去创建对象

@classmethod
def create(cls, p_name, p_age = 100, p_sex=True):
return cls(p_name=p_name, p_age=p_age, p_sex=p_sex)
  • BooleanField 布尔类型 默认false

  • AutoField 根据实际ID自增长的IntegerField

  • CharField(max_length=字符长度) 字符串

  • TextField 大文本字段,一般超过4000使用

  • IntegerField 整数

  • DecimalField(max_digits=None, decimal_places=None) 使用python的Decimal实例表示的十进制浮点数。参数说明:

    - DecimalField.max_digits 位数总数

    - DecimalField.decimal_places 小数点后的数字位数

  • FloatField 浮点数

  • NullBooleanField 支持null,true,false三种值

  • DateField([auto_now=false, auto_now_add=false])

- 使用python的datetime.date实例表示的日期

- 参数说明:

- auto_now 每次保存对象时,自动设置该字段为当前时间,用于最后修改时间,默认为false

- auto_now_add 第一次创建时自动设置当前时间,默认false

  • TimeField 表示时间,参数同DateField

  • DateTimeField 表示日期和时间,参数同DateField

  • FileField 一个上传文件的字段

  • ImageField 继承了FileField的所有属性和方法,但对上传的对象进行校验,确保它是个有效的image

 

字段选项:

  • null 如果为True,将会以NULL存储到数据库,默认False

  • blank 如果为True,则该字段允许为空白,默认是False

ps:null是数据库范畴的概念,blank是表单验证范畴的

  • db_column 字段名称,如果未指定,则使用属性的名称

  • db_index 若值为True,则在表中会为此字段创建索引

  • default 默认值

  • primary_key 若为True,则该字段会成为模型的主键字段

  • unique 如果为True,这个字段在表中必须有唯一值

关系分类

  • ForeignKey 一对多,将字段定义在多端

  • ManyToManyField 多对多,将字段定义在两端中

  • OneToOneField 一对一,将字段定义在任意一端中

 

3、模型成员objects

查询条件

属性__运算符 = 值

  • gt 大于>

  • lt 小于<

  • gte 大于等于>=

  • lte 小于等于<=

  • = 等于

  • in 在某一个集合中

  • contains 包含 类似于模糊查询的like,大小写敏感

  • startswith 以xx开始 本质也是like,大小写敏感

  • endswith 以xx结束 本质也是like,大小写敏感

  • exact 判断,大小写敏感

  • isnull, isnotnull:是否为空

    • 前面同时添加i,ignore忽略大小写

    • 时间比较运算符:

year,month,day,week_day,hour,minute,second

  • 查询快捷: pk 代表主键

  • 跨关系查询: 模型类名属性名比较运算符,实际上就是处理的数据库中的join

model.Student.create(p_name=”hhh”)  #创建 只有调用save后才会在数据库创建数据
model.Student.save()  #保存
model.Student.objects.all()  #查询所有
model.Student.objects.get(pk=2)  #查询单条 必须带条件
model.Student.objects.get(pk=2).delete # 删除
model.Student.objects.filter(condition)  #过滤并返回符合条件数据
model.Student.objects.exclude(condition)  #过滤并返回不符合条件数据
#ps:连续使用 链式使用
Person.objects.filter().exclude().filter().filter()

返回查询集的方法:

  • all() 返回所有数据

  • filter() 返回符合条件的数据

  • exclude() 过滤掉符合条件的数据

  • order_by 排序

  • values() 一条数据就是一个字典,返回一个列表 将queryset转成一个类似于JSON的格式

    • 限制查询集,可以使用下标的方法进行限制等同于sql里面limit

student_list =model. Student.Object.all()[0:5] #下标不能为负数,可以防止溢出

返回单个数据:

  • get() 返回一个满足条件的对象,如果没有找到会引发DoesNotExist异常,如果找到多个会引发MultiObjectsReturned异常

  • first() 返回查询集中的第一个对象

  • last() 返回查询集中的最后一个对象

  • count() 返回当前查询集中的对象个数

  • exists() 判断查询集中是否有数据,如果有数据返回True没有反之

F方法:

  • 可以获取属性的值

  • 可以实现一个模型的不同属性的运算操作

  • 还可以支持算术运算

Q对象:

  • 过滤器的方法中的关键参数,常用于组合条件

    • 年龄小于25

         model.Student.objects.filter(Q(sage__lt=25))
  • Q对象语法支持 |(or),&(and),,~(取反)

重写all方法:

在models中

class AnimalManager(models.Manager):
	def get_queryset(self):
	return super(AnimalMamanager, self).get_queryset().filter(is_delete=False)

调用方式:

在model中:

objects = AnimalManager()

在views中:

model.Animal.object.all()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值