上篇说了orm中内置了一个object对象,所有的查询要先通过object,之后的筛选过滤等方法中,常用的有filter和values。今天不扯原理,只讲使用方法。
我们都知道orm本质是将SQL转化为类属性操作,也就是说代码中的方法是跟SQL是可以对应上的。
from django.db import modelsclass Premission(models.Model):title = models.CharField(verbose_name='权限名称',max_length=32)url = models.CharField(verbose_name='权限url',max_length=128)def __str__(self):return self.urlclass Role(models.Model):name = models.CharField(verbose_name='角色名称',max_length=32)premission = models.ManyToManyField(verbose_name='角色权限',to=Premission)def __str__(self):return self.nameclass User(models.Model):user = models.CharField(verbose_name='用户名',max_length=32,blank=True,null=True)password = models.CharField(verbose_name='用户密码',max_length=32,blank=True,null=True)role = models.ManyToManyField(verbose_name='用户角色',to=Role)def __str__(self):return self.user
filter()
相当于sql中的WHERE,区别是sql得到确切的数据,orm得到数据的映射。不完全准确,勿喷。
orm:models.User.objects.filter(user='luka')sql:SELECT * FROM User WHERE user= 'luka';
values()
一种相当于sql中的WHERE和from之间,另一种情况可通过双下划线实现跨表查询(例子3)
例子1:orm:models.User.objects.values()SQL:SELECT * FROM User ;例子2:orm:models.User.objects.values('password')SQL:SELECT password FROM User ;例子2:orm:models.User.objects.filter(user='luka').first().values('role__name')SQL:SELECT Role.name FROM Role,(SELECT * FROM User WHERE user = 'luka') AS ret WHERE Role.role_id=ret.user_id;
filter()和values()的区别在于,filter返回对象,而values返回字典。一般情况下,我们要的最终查询结果是字典这样确切的数据,而不是一个确切结果的映射。
the end
张杰挺好的,不知道为什么这么多人喷他。
“
这战场千百热血战士
一路向前飞驰
捍卫世界的勇士
”

文章转载自大碗岛星期天下午的梦,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




