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