DjangoORM的相关操作

DjangoORM的相关操作

在python脚本中直接调用Django环境

import os

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orm.settings")
    import django
    django.setup()

一般操作

必知必会13条

class Person(models.Model):
    name = models.CharField(max_length=16)
    age = models.IntegerField(null=True)
    day = models.DateField(null=True)

#<1> all():                 查询所有结果,返回Queryset对象
ret  = models.Person.objects.all()

#<2> filter(**kwargs):      查询不到返回一个空的Queryset对象,Queryset对象相当于继承list,具备列表的特性
ret = models.Person.objects.filter(id=1)[0]

#<3> get(**kwargs):         返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
 ret = models.Person.objects.get(id=1)

#<4> exclude(**kwargs):     它包含了与所给筛选条件不匹配的对象
 ret = models.Person.objects.exclude(name='小黑')

#<5> values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列
ret = models.Person.objects.values('name')

#<6> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
ret = models.Person.objects.all().values_list()

#<7> order_by(*field):      对查询结果排序
ret = models.Person.objects.all().order_by('day')

#<8> reverse():             对查询结果反向排序,请注意reverse()通常只能在具有已定义顺序的QuerySet上调用(在model类的Meta中指定ordering或调用order_by()方法
ret = models.Person.objects.all().order_by('day').reverse()

#<9> distinct():            从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重。)

#<10> count():              返回数据库中匹配查询(QuerySet)的对象数量。
ret = models.Person.objects.filter(id=1).count()

#<11> first():              返回第一条记录
ret = models.Person.objects.all().first()

#<12> last():               返回最后一条记录
 ret = models.Person.objects.all().last()

#<13> exists():             如果QuerySet包含数据,就返回True,否则返回False
ret = models.Person.objects.exists()

返回QuerySet对象的方法

all()
filter()
exclude()
order_by()
reverse()
distinct()

特殊的QuerySet

values() 返回一个可迭代的字典序列
values_list() 返回一个可迭代的元祖序列

返回具体对象的

get()
first()
last()

返回布尔值的方法

exists()

返回数字的方法

count()

单表查询之双下划线

#获取id大于1 且 小于4>>>>>>1<id<4
ret = models.Person.objects.filter(id__gt=1,id__lt=4)

#获取id等于1,2,3的数据
ret = models.Person.objects.filter(id__in=[1,2,3,])

#相当于not in
ret = models.Person.objects.exclude(id__in=[1,2,3,])

#获取name字段包含xxx的
ret = models.Person.objects.filter(name__contains='xxx')

#获取name字段包含'xxx'的,大小写不敏感
ret = models.Person.objects.filter(name__icontains='xxx')

#1<=id<=3,等价于SQL的bettwen  and
ret = models.Person.objects.filter(id__range=[1,3])
#类似的还有: startswith,istartswith,endswith,iendswith

#date字段
ret = models.Person.objects.filter(day__year=2018,day__day=20)
    

原文地址:https://www.cnblogs.com/guodengjian/p/9206196.html

时间: 2024-08-30 14:37:45

DjangoORM的相关操作的相关文章

二叉树的相关操作

#include<stdio.h> #include<malloc.h> #define MAXSIZE 20 typedef char TEelemtype; typedef struct BiTNode{ TEelemtype data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; //队列的方式 typedef struct queueelem { BiTNode* b[MAXSIZE]; int front,rear;

(二十四)linux新定时器:timefd及相关操作函数

timerfd是Linux为用户程序提供的一个定时器接口.这个接口基于文件描述符,通过文件描述符的可读事件进行超时通知,所以能够被用于select/poll的应用场景. 一,相关操作函数 #include <sys/timerfd.h> int timerfd_create(int clockid, int flags); int timerfd_settime(int fd, int flags, const struct itimerspec *new_value, struct itim

二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)

将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: 1 typedef struct TreeNode{ 2 int data; 3 struct TreeNode *left; 4 struct TreeNode *right; 5 }TreeNode; 2.创建根节点: 1 TreeNode *creatRoot(){ 2 TreeNode * root =(TreeNode *)malloc(sizeof(TreeNode)); 3 if(NULL=

linux下进程相关操作

一.定义和理解 狭义定义:进程是正在运行的程序的实例. 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动. 进程的概念主要有两点: 第一,进程是一个实体.每一个进程都有它自己的地址空间,一般情况下,包括文本区域.数据区域和堆栈区域.文本区域存储处理器执行的代码:数据区域存储变量和进程执行期间使用的动态分配的内存:堆栈区域存储着活动过程调用的指令和本地变量. 第二,进程是一个“执行中的程序”.程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们

android DataBase的相关操作(建立表结构和创建表)

先建立一个table的基类: public abstract class DbBaseTable { private static final String TAG = "DbBaseTable"; /** * @return the DB table name */ abstract String getName(); /** * Creates the DB table according to the DB scheme * * @param db */ abstract voi

WebView中的视频全屏的相关操作

最近工作中,基本一直在用WebView,今天就把它整理下: WebView 顾名思义,就是放一个网页,一个看起来十分简单,但是用起来不是那么简单的控件. 首先你肯定要定义,初始化一个webview,其实网上的例子很多,我这里就简单的把一些WebView 中可能会用到的的很重要的属性以及支持全屏播放视频该怎么实现的代码粘出来,直接放到项目中去就行了 <span style="white-space:pre"></span><pre name="co

jQuery学习笔记--JqGrid相关操作 方法列表(上)

1.获得当前列表行数:$("#gridid").getGridParam("reccount"); 2.获取选中行数据(json):$("#gridid").jqGrid('getRowData', id); 3.刷新列表:$(refreshSelector).jqGrid('setGridParam', { url: ''), postData: ''}).trigger('reloadGrid'); 4.选中行:$("#jqGrid

JQuery select控件的相关操作

本文转载于 http://www.cnblogs.com/zfc2201/archive/2012/09/06/2674312.html JQuery获取和设置Select选项方法汇总如下: 获取select 先看看下面代码: $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发 var checkText=$("#select_id").find("option:s

python文件相关操作

Python文件相关操作 打开文件 打开文件,采用open方法,会将文件的句柄返回,如下: f = open('test_file.txt','r',encoding='utf-8') 在上面的代码中,open()方法进行打开文件等相关操作,open()方法其中第一个参数是要打开的文件的文件路径,第二个参数是对要打开文件要执行的权限,第三个参数是文件采用字符编码. 而open()方法返回的内容叫做文件句柄.我们可以打印返回的文件句柄来看下: f = open('test_file.txt','r