Django对各种数据库都提供了很好的支持,对不同的数据库,Django提供了统一调用的API,我们可以根据不同的业务需求使用不同的数据库。
一、配置数据库:
pip install pymysql
如果报错可以尝试:
python -m pip install pymysql
在工程目录下的__init__.py中输入:
import pymysql
pymysql.install_as_MySQLdb()
完成数据库驱动加载
在settings.py中配置数据库连接信息
'ENGINE':'django.db.backends.mysql',
'NAME':'Learn', # 数据库名
'USER':'root', # 账号
'PASSWORD':'12345678', # 密码
'HOST':'localhost', # 本机
'PORT':'3306', # 默认
一般开发流程:
1. 配置数据库
2. 定义模型类(一个模型类对应数据库中的一张表)
3. 生成迁移文件
python manage.py makemigrations
4. 执行迁移生成数据表
Python manage.py migrate
5. 使用模型类进行增删改查(CRUD)操作
存储:
.save()
查询:
查所有:objects.all()
查单个: object.get()
更新:
基于查询的
查好的对象,修改属性,然后sava()
删除:
基于查询的
调用delete()
6. 连接mysql驱动:
Mysqlclient:
Python2,3都能直接使用
致命缺点: 对mysql安装有要求,必须在指定位置存在配置文件
Python-mysql:
Python2支持很好
Python3不支持
Pymysql:
Python2,3都支持
它还可以伪装成前面的库
二、ORM
ORM(Object Relational Mapping)对象关系映射,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。 可以简单理解为翻译机。
核心思想,解耦合, 将业务逻辑和SQL进行了解耦。
三、常用字段类型
models.CharField()
models.IntergerField()
models.EmailField() # 继承自CharField,对email的特殊处理
models.FileField() # 继承自CharField,对文件的特殊处理
models.TextField() # 布尔值
models.ForeignKey() # 外键
# 设置外键如果报错,需要在外键值的后面加 on_delete=models.CASCADE
models.OneToOneField() # 一对一
models.ManyToManyField() # 多对多
四、模型过滤
- filter :返回符合筛选条件的数据集
- exclude :返回不符合筛选条件的数据集
多个filter和exclude可以连接在一起查询
Person.objects.filter().filter().xxxx.eclude().exclude().yyyy
查询集QuerySet[] 表示从数据库获取的对象集合 查询集可以有多个过滤器 过滤器就是一个函数,基于所给的参数限制查询集结果 从SQL角度来说,查询集合和select语句等价,过滤器就像where条件
返回查询集的方法称为过滤器
all() 返回所有数据
filter() 返回符合条件的数据
exclude() 过滤掉符合条件的数据
order_by() 排序
values() 一条数据就是一个字典,返回一个列表
tablename.object.get()获取单个对象时:
- 查询条件没有匹配的对象,会抛异常,DoesNotExist
- 如果查询条件对应多个对象,会抛异常,MultipleObjectsReturned
切片
- 和python中的切片不太一样
- QuerySet[5:15] 获取第五条到第十五条数据
- 相当于SQL中limit和offset
使用aggregate()函数返回聚合函数的值
Avg:平均值
Count:数量
Max:最大
Min:最小
Sum:求和
Student.objects().aggregate(Max('sage'))
F对象
- 可以获取我们属性的值
- 可以实现一个模型的不同属性的运算操作
- 还可以支持算术运算
Q对象
- 可以对条件进行封装
- 封装之后,可以支持逻辑运算
- 与 & and
- 或 | or
- 非 ~ not