基于Django搭建Python web项目——模型及应用(四)

1.模型抽象类

  模型类都需要继承django.db下的models.Model类,通常数据表包含一些相同的字段,所有可以创建一个抽象模型基类,数据表模型类都继承此基类。

from django.db import models

class Base(models.Model):
	status = models.IntegerField('状态', default=1)
	create_time = models.DateTimeField('创建时间', auto_now_add=True)
	update_time = models.DateTimeField('更新时间', auto_now_add=True)

	class Meta:
		abstract = True

2.模型类

  模型类需要定义数据字段,str()魔术方法返回数据,db_table对应数据的数据表名。

from django.db import models
from .base import Base

class Users(Base):
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=32)
    interfere = models.CharField(max_length=5)
    telephone = models.CharField(max_length=13)
    email = models.CharField(max_length=45)
    isadmin = models.IntegerField(default=0)

    def __str__(self):
        return "{}\n{}\n{}\n".format(self.username, self.telephone, self.email)

    class Meta:
        db_table = "ea_users"

3.shell模式

  有时候我们需要通过命令行的形式连接数据库进行查看修改数据时,这时候就需要用到Django的shell命令行模式。

python manage.py shell

在这里插入图片描述

4.模型数据查询

4.1基本查询

  下面所有操作都是基于Users模型类的操作。
  all()方法查询该对象的所有实例,即返回数据表所有数据。

Users.objects.all()

在这里插入图片描述
  get()方法查询该对象的一条实例,即返回数据表一条数据。

Users.objects.get(pk=2)

在这里插入图片描述
  filter()方法返回一个QuerySet,而不是对象实例,当查询结果不存在时返回空的QuerySet,而不是返回异常,可以对结果集作切片操作来获取实例内容,例如下面查看状态正常的用户。

Users.objects.filter(status=1)

在这里插入图片描述
  Q是Django自带的内容,用于查询。主要的用途是在页面的搜索框中输入内容后台查询相应的数据集,例如下面查询id大于等于2并且状态正常的用户信息。

Users.objects.filter(Q(id__gt=2) & Q(status=1))

在这里插入图片描述
  常用的查询条件:

条件含义
__gt大于
__gte大于等于
__lt小于
__lte小于等于
__in存在于一个list范围内
__startswith以…开头
__istartswith以…开头忽略大小写
__endswith以…结尾
__iendswith以…结尾,忽略大小写
__range在…范围内
__year日期字段的年份
__month日期字段的月份
__day日期字段的日
__isnull=True/False
__overlap集合至少有一个元素重合
__contains集合包含
__regex匹配正则表达式

4.2其他查询

  order_by排序

Users.objects.filter(status=1).order_by('pk')

  order_by随机查询

Users.objects.filter(status=1).order_by('?')

  distinct去重

Users.objects.all().values("email").distinct()

  reverse反序

Users.objects.order_by('pk').reverse()

5.模型数据修改

  添加数据

Users(username='zhangsan', password=md5_('123456'), telephone='xxxxxxxxxxx', email='zhangsan@format.com', ).save()

  删除数据,但实际都是假删除,修改数据的状态

user = Users.objects.get(pk=1)
user.delete()

  修改数据

user = Users.objects.get(pk=2)
user.email = 'xxxx@formail.com'
user.save()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值