简介:本章主要介绍基于Django模型使用数据库
一、配置数据库信息
以MySQL为例,需要在setting.py文件中找到DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 配置为MySQL
'NAME': 'xxx', # 数据库名
'USER': 'xxxx', # 数据库登录账户
'PASSWORD': 'xxxx', # 密码
'HOST': '127.0.0.1', # 数据库ip地址
'PORT': 3306, # 数据库端口号
'OPTIONS':{
"init_command": "set foreign_key_checks = 0;", # 取消外键约束
}
}
需要安装mysqlclient,如果mysqlclient使用pip安装失败就去官网下载
mysqlclient · PyPIPython interface to MySQLhttps://pypi.org/project/mysqlclient/#files
二、用Django中的orm操作数据库
orm的作用为在关系型数据库和业务实体对象之间进行映射,orm对底层进行了封装与隔离,在使用Django开发的项目时,无需关心程序使用的是mysql还是Oracle数据库,在操作具体的数据库时,也无需和复杂的SQL语句打交道,只需要使用orm提供的API操作就行。
每个模型都是一个Python类,每个模型都会映射到一个数据库表上
类:数据库中的数据表
属性:数据库中的字段
实例:数据库表中的数据行
1、创建数据库
首先确保mysql服务是启用中的
创建数据库命令:create database fqq DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
2、使用orm创建表
所有Django模型都必须继承自Model类,Model类位于包django.db.models中。在app目录下的models.py文件中导入models
然后执行如下命令
生成迁移文件:python manage.py makemigrations
执行迁移:python manage.py migrate
然后查看数据库里的表
2、使用orm删除、修改表结构
删除很简单,把models.py文件中对应的类注释掉或者删除,重新执行一下上面的命令就可以了
删除列就删除models.py文件中对应的类里面的属性删掉,重新执行命令就可以了
修改也一样,把类里面对应内容替换掉,重新执行命令
3、使用orm给表增加字段
因为原有的表里字段可能有默认值,所以新加的字段选第一个的话就是让你手动添加一个默认值,第二个选项是退出让你在models.py对应的类中的字段赋予一个默认值,这样才能添加成功。
from django.db import models
# Create your models here.
class UserInfo(models.Model):
name = models.CharField(max_length=30)
password = models.CharField(max_length=50)
age = models.IntegerField()
date = models.IntegerField()
sex = models.CharField(max_length=10, default='男')
email = models.EmailField(max_length=30, default='1234567@qq.com')
# 用下面这种方式也可以,null=True允许数据库中为空,blank=True允许admin后台中为空
# email = models.EmailField(null=True, blank=True)
后面加上default默认值,就可以了
4、增删改查
Django的manage工具提供了shell命令,帮助我们直接在终端中执行测试Python语句。命令如下:python .\manage.py shell
下载一个ipython,IPthon是基于Python默认CPython解释器之上的一个增强的交互式解释器,提供了颜色显示、tab补全、历史机制、集成Python调试器等功能。
pip install ipython
1)新增数据
使用create新增
使用save()新增
2)更新数据
save()方法:
update()方法:
3)删除数据
删除筛选的数据:
删除所有数据:
如果删除的数据有外键字段,且模型中的on_delete参数被设置为CASCADE,则删除外键关联表中的对应数据。
5、QuerySet对象
QuerySet对象也被称为“查询集”,表示从数据库获取的数据对象集合,查询集有一个最重要的特性--惰性执行。
惰性执行是指,在创建查询集后不会访问数据库,只在调用相关方法时才会访问数据库,这些方法包括遍历迭代、系列化等。
1)all()方法
该方法用于获取模型的QuerySet对象,即获取所有的数据
2)filter()方法
该方法用来过滤数据,和sql语句中的where语句类似,获取满足条件的数据并返回一个QuerySet对象,如果没有获取数据,就返回空的QuerySet对象。
语法:模型类.objects.filter(字段=值)
3)get()方法
该方法用于查询数据表记录,以模型对象的形式返回符合要求的一条数据
如果没有记录或者记录超过1条,会出现错误提示,因此需要做异常捕获处理,filter方法则不会出现错误提示
4)exclude()方法
用于排除符合条件的数据,返回QuerySet对象,语法和filter方法一致,方法中还可以使用大于、小于、模糊匹配等操作符
操作符 | 含义 | 具体使用 |
__gt | 大于 | filter(age__gt=20) |
__gte | 大于或等于 | filter(age__gte=20) |
__it | 小于 | filter(age__it=20) |
__ite | 小于或等于 | |
__in | 在某列表内 | filter(age__in=[10,20] |
__contains | 模糊匹配 | filter(name__contains='王' |
__year | 日期字段的年份 | filter(createdate__year=2022) |
__month | 日期字段的月份 | |
__day | 日期字段的天数 |
5)values()方法
用于提取需要的字段,返回QuerySet对象,该对象包含的数据类型是由指定的字段和值形成的字典
6)distinct()方法
用于去重,返回一个QuerySet对象