模型_Django配置使用mysql数据库
.Django ORM : 类和数据表之间建立关系,通过面向对象的方式就可以操作数据库。
- O(objects)类和对象
- R(Relation)关系,关系数据库中的表格
- M(Mapping)映射
- 根据设计的模型类生成数据库的表格
- 通过方便的配置就可以进行数据库的切换
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 方式
- 功能:只能返回表中满足条件的一条且只能有一条数据,
- 返回值:返回值是一个模型类的对象
- 说明:参数应该写查询条件,如果查到多条数据,则抛出异常MultipleObjectsReturned,查不到数据,则抛异常DoesNotExist.
all方式:
- 功能:返回模型类对应表格
- 返回值:Queryset
- 说明:查询集
filter方式:
- 功能:返回满足条件的数据
- 返回值:返回值是querset类型
- 参数:查询条件
exclude:
- 功能:返回不满足条件的数据
- 返回值:querset类型
- 参数写查询条件
order_by:
- 功能:对查询结果进行排序
- 返回值:querset类型
- 参数中写根据哪些字段进行排序
其中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.查询集的特性:
- 惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据库的真正查询
- 缓存:当使用的是同一查询集时,第一次的时候会发生实际的数据库查询,然后把结果缓存起来,之后再使用这个查询集的时候,使用的是缓存中的结果。
2.限制查询集:
第一种:通过取下标 ,第二种:切片
可以对一个查询集进行取下标或者切片操作来限制查询集的结果。
对一个查询集进行切片操作会产生一个新的查询集,下标不允许为负数。
3.取出查询集的第一条数据的两种方式:
方式1:b[0] 如果b[0]不存在,会抛出IndexError异常
方式2:b[0:1].get()如果b[0:1].get()不存在,会抛出DoesNotExist异常。
exists:判断一个查询集中是否有数据。