Django模型--从配置到查询

模型_Django配置使用mysql数据库

.Django ORM : 类和数据表之间建立关系,通过面向对象的方式就可以操作数据库。

  1. O(objects)类和对象
  2. R(Relation)关系,关系数据库中的表格
  3. M(Mapping)映射
  4. 根据设计的模型类生成数据库的表格
  5. 通过方便的配置就可以进行数据库的切换

DjangoMysql配置

DATABASES={

    ‘default’:{
        ‘NAME’ :  ’student’,  #使用数据库的名称
        ‘USER’:’root’,        #连接数据库的名字  数据库必须手动创建
        ‘PASSWORD’:’123’,    #用户对应的密码
        ‘HOST’:’localhost’,    #指定mysql数据库所在的电脑ip
        ‘PORT’:3306,        #mysql端口号
    }
}

安装pymysql模块

3.pip install pymysql #mysql运行的模块

pymysql初始化

在项目App下__init__.py文件中加

import pymysql

pymysql.install_as_MySQLdb()

建立模型类(models.py下)

1.导入 from django.db import models,建立模型类,需要继承models.Model

接着就是建立响应的模型参考如下:

2.models字段及属性

可参见 Django文档:https://docs.djangoproject.com/zh-hans/2.1/

数据库迁移操作

python manage.py check
python manage.py makemigrations
python manage.py migrate

这样就生成自定义的数据库了。

注意:当修改模型类后,如果添加的选项不影响表单结构,则不需要重新做迁移,default和blank不影响表结构。


admin后台管理的使用以及步骤:

1.本地化,将语言和时区本地化,修改settings.py文件。

2.创建管理员

python manage.py createsuperuser

3.注册模型类,在admin.py中注册模型类,就是告诉django框架根据注册的模型类在生成 的管理页面上显示哪些内容。


查询

get 方式

  1. 功能:只能返回表中满足条件的一条且只能有一条数据,
  2. 返回值:返回值是一个模型类的对象
  3. 说明:参数应该写查询条件,如果查到多条数据,则抛出异常MultipleObjectsReturned,查不到数据,则抛异常DoesNotExist.

all方式:

  1. 功能:返回模型类对应表格
  2. 返回值:Queryset
  3. 说明:查询集

filter方式:

  1. 功能:返回满足条件的数据
  2. 返回值:返回值是querset类型
  3. 参数:查询条件

exclude:

  1. 功能:返回不满足条件的数据
  2. 返回值:querset类型
  3. 参数写查询条件

order_by:

  1. 功能:对查询结果进行排序
  2. 返回值:querset类型
  3. 参数中写根据哪些字段进行排序

其中get、filter、exclude参数是查询的条件

F查询:

用于类属性之间的比较,使用之前需要导入。

from django.db.models import F 

例如:查询图书价钱大于2倍图书数量的信息

BookInfo.objects.filter(price__gt=F('count')*2)

Q查询:

用于条件和条件之间的逻辑关系,not \and\ or,可以对Q对象进行& 、| 、- 操作。

同样使用之前先导入:

from django.db.models import Q

例如:查询id大于3且阅读量大于30的图书信息。

Bookinfo.objects.filter(id_gt=3,read__gt>30)

Bookinfo.objects.filter(Q(id_gt=3)&Q(read__gt>30))

Bookinfo.objects.filter(Q(id_gt=3)|Q(read__gt>30))

Bookinfo.objects.filter(-Q(id=3))

聚合函数:

作用于对查询结果进行聚合操作

  • Sum  求和
  • Count 计数
  • Avg    求平均数
  • Max   求最大值
  • Min  求最小值

使用这些聚合函数需要调用aggregate函数来使用聚合,返回值是一个字典。

同样使用之前需要先导入聚合类。

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

上例子:

1.查询所有图书的项目:
Bookinfo.objects.all().aggregate(Count('id'))
#{'id__count':5}
2.统计id大于3的所有图书的数目
Bookinfo.objects.filter(id__gt=3).Count()

对于返回值Queryset实例对象,可以继续调用上面的所有函数。下面详细说


查询集

all、filter、exclude、orderby调用这些函数会产生一个查询集,Queryset类对象可以继续调用上面的所有函数。

1.查询集的特性:

  1. 惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据库的真正查询
  2. 缓存:当使用的是同一查询集时,第一次的时候会发生实际的数据库查询,然后把结果缓存起来,之后再使用这个查询集的时候,使用的是缓存中的结果。

2.限制查询集:

第一种:通过取下标  ,第二种:切片

可以对一个查询集进行取下标或者切片操作来限制查询集的结果。

对一个查询集进行切片操作会产生一个新的查询集,下标不允许为负数。

3.取出查询集的第一条数据的两种方式:

方式1:b[0] 如果b[0]不存在,会抛出IndexError异常

方式2:b[0:1].get()如果b[0:1].get()不存在,会抛出DoesNotExist异常。

exists:判断一个查询集中是否有数据。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值