Django的ORM数据模型增删改查

版权声明:作者:人学物理死的早 出处:https://blog.csdn.net/weixin_39561473 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。 https://blog.csdn.net/weixin_39561473/article/details/86547426

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)

猜你喜欢

转载自blog.csdn.net/weixin_39561473/article/details/86547426