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()