20190707wdd

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

分类:

技术点:

相关文章: