博客
关于我
Django ORM操作
阅读量:558 次
发布时间:2019-03-10

本文共 2872 字,大约阅读时间需要 9 分钟。

Django中集成了ORM框架,可以直接使用orm对数据库进行增删查改等操作,相对sql语句来说,orm语句更加简洁易懂,方便开发者进行开发

1.增加数据

数据库中的表有一对一关系,一对多关系和多对多关系,对于这几种关系我们有不同的方法去实现增加数据操作。

一对一关系

对于一对一关系比较简单,我们假设有一张表student,里面有student_id(学号)和name(两个属性),代码如下:

# 使用如下方法时,需要先引入数据库from .models import Student# 第一种方法Student.obects.create(student_id='123456', name='lcs')# 第二种方法stu = Student(student_id='123456', name='lcs')stu.save()

一对多关系

我们在student表中添加一个属性counselor,表示他的辅导员是谁,辅导员对于学生是一对多的关系

# 使用如下方法时,需要先引入数据库from .models import Student# 第一种方法Student.obects.create(student_id='123456', name='lcs', counselor_id=2)# 第二种方法stu = Student(student_id='123456', name='lcs', counselor_id=2)stu.save()

多对多关系

比如说我们在表中添加一个字段teacher,他表示这个学生的老师。显然,一个学生对应多个老师,一个老师对应多个学生,所以这个是多对多关系。

我们新建一个Teacher表,表示这个学校所有的老师

# 同样,我们需要先引入这连个表from .models import Teacher, Student# 获得学生和老师stu = Student.objects.get(name='lcs')teacher_1 = Teacher.objects.get(name='hch')teacher_2 = Teacher.objects.get(name='hyh')# 将两个teacher对象添加到这个学生teacher字段中stu.teacher.add(teacher_1, teacher_2)

2.删减数据

删除操作比较简单,但是要注意级联删除操作的存在,否则会造成不可预估的后果

# 引入数据表from .models import studentstudent.objects.filter(student_id='1213131').delete()

3.查找数据

关于查找数据有比较多的方法,如果只看sql语句的话,有大于,小于,大于等于,小于等于,in操作等,下面介绍一下比较基本的操作

# 引入数据库from .models import student# 查找所有数据student.objects.all()# 按条件筛选数据,没有返回为空student.objects.filter(name='lcs')# 返回符合条件的第一条数据student.objects.filter(name='lcs').first()# 返回符合条件的最后一条数据student.objects.filter(name='lcs').last()# 按条件返回数据,没有符合条件的数据则报错student.objects.get(name='lcs')# 对所有的名字去重后返回student.objects.values('name').distinct()

下面介绍sql语句中in,>,>=,<,<=等操作

# 引入数据库from .models import student# 获取个数student.objects.filter(name='seven').count()# 大于,小于student.objects.filter(age__gt=21)              	# 获取age大于21的值student.objects.filter(age__gte=21)              	# 获取age大于等于21的值student.objects.filter(age__lt=21)             		# 获取age小于21的值student.objects.filter(age__lte=21)             	# 获取age小于21的值student.objects.filter(age__lt=20, age__gt=18)   	# 获取age大于18 且 小于21的值# in操作student.objects.filter(age__in=[18,19,20])   			# 获取id等于18,19,20的数据student.objects.exclude(age__in=[18,19,20])  			# not in# isnull操作student.filter(teacher__isnull=True)# contains操作student.objects.filter(name__contains="ven")student.objects.filter(name__icontains="ven") student.objects.exclude(name__icontains="ven")		# icontains大小写不敏感# range操作student.objects.filter(age__range=[18, 21])   		# 年龄在18和21之间的学生# 其他类似操作# startswith,istartswith, endswith, iendswith,# order bystudent.objects.filter(age=21).order_by('student_id')    # ascstudent.objects.filter(age=21).order_by('-student_id')   # desc# group bystudent.objects.filter(age=20).values('name').annotate(name=Count('name'))# limit 、offsetstudent.objects.all()[10:20]

4.更新数据

# 引入数据库from .models import student# 第一种方法obj = student.objects.get(student_id='121212')obj.age = '20'obj.save()# 第二种方法student.objects.filter(student_id='121212').update(age=20)

转载地址:http://etwvz.baihongyu.com/

你可能感兴趣的文章
ubuntu安装gem和fastlane
查看>>
ViroMedia集成android报错Lcom/facebook/react/bridge/WritableMap
查看>>
onFailure unexpected end of stream
查看>>
android 集成weex
查看>>
《C Prime Plus》(第六版) 第03章 编程练习 5 unsigned long int 格式化输出
查看>>
【echarts】中国地图china.js 在线引用地址
查看>>
Flex 布局的自适应子项内容过长导致其被撑大问题
查看>>
PL/SQL 动态Sql拼接where条件
查看>>
Lua-table 一种更少访问的安全取值方式
查看>>
虚函数
查看>>
菱形继承
查看>>
Error:Cannot read packageName from AndroidManifest.xml
查看>>
RTL设计- 多时钟域按顺序复位释放
查看>>
斐波那契数列两种算法的时间复杂度
查看>>
int main(int argc,char* argv[])详解
查看>>
【Android踩过的坑】7.Android Studio 点击启动项目时进入调试模式
查看>>
【Android小技巧】1.快速查看SDK对应的API Level
查看>>
【自学Flutter】4.1 Material Design字体图标的使用(icon)
查看>>
C++清空队列(queue)方法
查看>>
【换行符】什么时候用cin.get()吃掉输入流中的换行符
查看>>