mysql数据库 查询模型_django-6-模型models-mysql数据库-简单查询

django-mysql数据库配置

django配置mysql

1、安装pymysql包

pip install pymysql

2、修改项目配置文件settings.py

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql', # 数据库引擎

'NAME': 'django_mysql', # 数据库名

'USER': 'root', # 账号

'PASSWORD': 'root', # 密码

'HOST': '47.101.168.243', # HOST

'POST': 3606, # 端口

}

}

3、配置 test1/test1/init.py

import pymysql

pymysql.install_as_MySQLdb()

重定向

视图函数不返回模板文件,直接访问另外一个视图函数

from django.http import HttpResponse,HttpResponseRedirect

def show_hero(request, bid):

book = Bookinfo.objects.get(id=bid)

heros = book.heroinfo_set.all()

return "hello"

def add_book(request):

print('删除文件成功')

# 不返回模板文件,跳转到另外视图函数

return HttpResponseRedirect('/show_hero')

或者如下实现

from django.shortcuts import render,redirect

return redirect('/show_hero')

模型类--字段属性和选项

字段类型

类型

描述

AutoField

自动增长的IntegerField,一般不需要指定

BooleanField

布尔类型,是否,Ture/False

NullBooleanField

支持Null、True、Flase

CharField

字符串

TextField

大文本

IntegerField

整数

DecimalField

十进制浮点数,max_digits 总位, decimal_places 小数位

FloatField

浮点数

DateField

日期,auto_now_add 自动设置该字段为当前时间,auto_now 自动修改为更新时间 ,年月日

TimeField

时间 ,小时

DateTimeField

日期时间 ,年月日 小时

FileField

文件

ImageField

图片文件,继承于FileField,校验是否有效图片

选项

选项名称

描述

default

默认值

primary_key

主键设置

unique

唯一值

db_index

建立索引

db_column

设置指定表字段名称

null

设置是否允许为空

blank

内容是否允许为空白,控制后台管理是否允许不填

查询

get()返回一条,且只能有一条,返回模型对象

all()返回所有数据,返回Queryset类型对象,叫查询集

filter()查询条件

exclude()返回不满足条件的数据

order_by对查询结构排序

查询条件的格式:属性名__条件名=值

举例

BookInfo.objects.get(id=1)

查询条件 filter

判等:exact

BookInfo.objects.get(id__exact=1)

> 模糊查询:contains

​```python

BookInfo.objects.filter(btitle__contains='传' )

以什么结尾endswith 开头startswith

BookInfo.objects.filter(btitle__endswith='部' )

BookInfo.objects.filter(btitle__startswith='射' )

空查询 isnull

BookInfo.objects.filter(btitle__isnull=False )

范围查询 in

BookInfo.objects.filter(id__in=[1,3,5])

比较查询 gt lt gte lte 大于 小于 大于等于 小于等于

BookInfo.objects.filter(id__gt=1) # id 大于1

日期查询 year month day

BookInfo.objects.filter(bpub_date__year=1980) # 1980年出版的图书

from datetime import date

BookInfo.objects.filtet(bpub_date__gt=date(1980,1,1)) # 1980年之后出版的图书

查询条件 exclude

BookInfo.objects.exclude(id=3) # 返回id不等于3的查询集

查询条件order by

order by all()方法可以省略

BookInfo.objects.all().order_by("id","btitle") 从小到大排序

BookInfo.objects.all().order_by("-id") 从大到小排序

F对象

用于类属性之间的比较

使用之前需要先导入F类

from django.db.models import F

# 查询阅读量大于评论量

BookInfo.objects.filter(bread__gt=Q('bcomment'))

# 查询阅读量大于两倍评论量

BookInfo.objects.filter(bread__gt=Q('bcomment')*2)

Q对象

用于条件之间的逻辑关系,not and or ,可以使用Q对象进行操作,~ & |

BookInfo.objects.filter(id__gt=3,bread__gt=30) # id>3且阅读量大于30

BookInfo.objects.filter(Q(id__gt=3)&Q(bread__gt=30)) 且

BookInfo.objects.filter(Q(id__gt=3)|Q(bread__gt=30)) 或

BookInfo.objects.filter(~Q(id__gt=3)&Q(bread__gt=30)) id不等于3,非

聚合函数

对结果集进行聚合操作 sum count max min avg

django使用聚合函数,必须使用aggregate来进行聚合,结果返回一个字典

使用前需要先导入一个聚合类,如下

from django.db.models import Sum,Count,Max,Min,Avg

BookInfo.objects.all().aggregate(Count('id'))

# 返回结果:{'id_count':5}

count函数

或者去掉all()也可以

BookInfo.objects.all().count()

# 直接返回数量 5

注意,对于QuerySet对象可以继续使用上述函数操作

查询集

查询集特性

1、惰性查询:只有实际使用查询集中的数据时,才会对数据库进行真正查询

book=BookInfo.objects.all()

# 此时是没有执行数据库查询

book.title # 此时进行查询

2、缓存:当使用同一个查询集的时候,第一次会使用实际数据库查询的时候,然后把结果缓存下来,之后再使用这个查询集的时候,使用缓存中的结果。

限制查询集

对一个查询集可以进行取下标和切片操作,来限制查询及结果。

对一个查询集切片,会产生一个新的查询集,下标不可为负数

# 取出查询集第一条数据

b=BookInfo.objects.all()

b[0] # 如果不存在,返回IndexError

b[0:1].get() # 如果不存在,返回DoesNotExist异常。

exists()

b=BookInfo.objects.all()

b1=b[0:5].get()

b1.exists() # 判断查询集是否有数据,没有返回False

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值