Django是一套开发成本低、迭代周期快的python web框架,而如mysql等关系数据库则是网站的必备组件,django通过设计一套python对象与数据库表的映射系统ORM,使得开发者不用写一行SQL语句就能实现极其复杂的关系数据库操作,特别是关联多张表的SQL操作。
就如下图所示,ORM的功能就是将Python语句转为SQL语句,同时把SQL语句转为Python语句,实现用python控制数据库的功能。
既然要通过Python来操作数据库,那首要的就是建表,然后就是对数据库的增删改查。
一、创建数据表
Django的ORM系统中,建表的时候可以通过继承django.db.models.Model的类来创建自己的表,类中的所有字段就是数据表中的表头,在创建字段的时候会对根据字段的含义来创建不同的字段类型,如下学生表:
from django.db import models #导入django自带的类
class Student(models.Model): #创建的表需要继承类
name = models.CharField(max_length = 32) #字符串字段
age = models.IntegerField() #整形字段
gender = models.CharField(max_length = 8)
这里的Student代表着表,Student.name、Student.age……是列名。
1、常用字段属性
- IntegerField(Field) 整数
- CharField(Field) 字符串
- EmailField(CharField) 邮件
- IPAddressField(Field) ipv4协议
- FileField(Field) 文件
- ImageField(FileField) 图片
- DateTimeField(DateField) 时间 年月日 时分秒
- DateField(DateTimeCheckMixin, Field) 年月日
- TimeField(DateTimeCheckMixin, Field) 时分秒
2、图片字段(ImageField)
照片上传功能是需要安装一个模块pillow,进入虚拟环境然后使用命令安装,当然你也在真实环境里安一个,以供不时之需:
Pip install pillow
照片字段带有一个属性为:upload_to=路径,路径必须使用相对路径!代表照片上传后存在哪里。数据库中的照片通常是学生自己上传的照片,学生上传的照片应该存放于静态文件夹下的照片文件夹中,所以upload_to = static/img/
二、增加数据库信息
给学生表添加信息时首先要在视图中导入表,然后对表进行实例化,通过赋值的方式添加字段内容,最后使用save()保存如数据库:
from App名.models import Student #导入表
student = Student() #实例化一个学生
#给字段添加数据
student.name = '小李'
student.age = 18
student.grender = '男'
#存入数据库
student.save()
三、查询表中数据
ORM框架为每个表对应的类都生成了objects对象,而这个objects对象拥有操作表的所有方法,诸如批量查询filter、单次查询get等。
1、all()
使用all()会获取表中所有数据,以数组中嵌套字典的格式取出 [{name:xxx,age:xx,gender:xxx},{name:xxx,age:xx,gender:xxx},{name:xxx,age:xx,gender:xxx}]
Student.object.all()
2、filter(条件)
使用filter(条件),会根据条件进行选取数据,获取的数据也为数组中嵌套字典的格式,但是允许列表为空,查询的条件需要使用表中字段来查询,通常可以.first()来获取第一个数据库数据(字典格式),使用方法如下:
Student.object.filter(name='小明') #获取名字为小明的数据
Student.object.filter(id=1) #获取索引为1的数据
Student.object.filter(gender='男') #获取性别为男的数据
3、get(条件)
使用get(条件),同样会根据条件进行筛选,但是get()只能获取唯一的数据,如果获取的数据大于一条就会报错,所以一般在获取确定的数据时使用,例如确认用户存在后,获取用户。使用方法如下:
Student.object.get(id=1)
Student.object.get(email='[email protected]')
四、删除数据
删除表中数据,首先需要获取需要删除的数据(一行或者多行),在models.py中创建表的时候,会自动生成一个索引id,从1开始自增。所以索引是找数据,当然也可以通过字段进行获取然后删除:
#获取学生表中所有男学生
boyStudent=Student.object.filter(gender='男')
#删除所有男学生
boyStudent.delete()
五、修改数据
要修改数据,首先要获取需要修改的数据行,然后重新赋值后保存就可以修改数据,如下:
stu = Student.object.get(id=1)
stu.age = 20
sur.gender = '女'
stu.save()
修改数据还有一种方法是使用update():
#用法一
Student.objects.filter(id=1).update(name='小黑',age=23)
#用法二
stu = Student.objects.filter(id=1)
dic = {'name': '小黑', 'age': 23}
stu.update(**dic)