django框架orm层api简单总结

django框架对orm层强大的shell api使得开发者可以轻松地开发和变更数据库表操作,真正符合了DRY(don’t repeat yourself)原则。我打算和朋友合写一个中文的django教程,先在这里进行总结一下简单的数据库api。

查询所有记录

>>> from polls.models import Question, Choice
>>> Question.objects.all()
<QuerySet [<Question: What's up?>]>
>>> Question.objects.count()
1

保存记录

>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
>>> q.question_text
What's new?
>>> q.save()

条件查询

# 按照字段查询
>>> Question.objects.filter(id=1)
<QuerySet [<Question: What's up?>]>
# 使用富api查询,双下划线来表示关系
>>> Question.objects.filter(question_text__startswith='What')
<QuerySet [<Question: What's up?>]>
# 如果结果不存在filter方法返回空的QuerySet
>>> Question.objects.filter(id=2)
<QuerySet []>

# 得到今年的所有问题
>>> from django.utils import timezone
>>> current_year = timezone.now().year
>>> Question.objects.get(pub_date__year=current_year)
# 使用get方法,如果记录不存在会抛出异常
>>> Question.objects.get(id=2)
Traceback (most recent call last):
    ...
DoesNotExist: Question matching query does not exist.

关联查询

# 使用pk或者id是一样的都是默认主键
>>> q = Question.objects.get(pk=1)
# 使用关联关系一对多的表名加_set来处理关联的记录
>>> q.choice_set.all()
<QuerySet []>
# Create方法有两个作用,创建了一个实例,并且insert到了数据库中
>>> q.choice_set.create(choice_text='Not much', votes=0)
<Choice: Not much>
>>> q.choice_set.create(choice_text='The sky', votes=0)
<Choice: The sky>
>>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)

# Choice 对象多对一通过富api查找所属的Question对象.
>>> c.question
<Question: What's up?>
# 通过一个Question对象,找到它所有的choice
>>> q.choice_set.all()
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
>>> q.choice_set.count()
3
# 使用富api查询,双下划线来表示关系,这个富api可以按照你想要的方式使用。
>>> Choice.objects.filter(question__pub_date__year=current_year)
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
# 使用delete方法可以删除一个记录。
>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()

原文发布于微信公众号 - python全栈布道师(gh_f7cbe2f9567b)

原文发表时间:2017-01-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员叨叨叨

【PHP】Propel的使用,看这一篇就够了

本文为学习Propel框架使用的笔记,默认已经安装好Propel环境,若有读者不知如何安装Propel,可参考《听说你PHP配置Composer遇到了一些困境》...

51950
来自专栏nice_每一天

Elasticsearch JavaApi

 官网JavaApi地址:https://www.elastic.co/guide/en/elasticsearch/client/java-api/curre...

75540
来自专栏积累沉淀

Java接入Spark之创建RDD的两种方式和操作RDD

首先看看思维导图,我的spark是1.6.1版本,jdk是1.7版本 ? spark是什么? Spark是基于内存计算的大数据并行计算框架。Spark...

35490
来自专栏分布式系统进阶

Librdkafka的基础数据结构 2 --- 定时器 原子操作与引用计数

引用了一个新的struct来将引用计数和调用信息结合起来, 使用链表来管理这个struct的对象. 每次对引用计数的操作都要操作这个链表.

11110
来自专栏python学习路

三、模型(一)

当我们的程序涉及到数据库相关操作时,我们一般都会这么做: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调...

41790
来自专栏Jerry的SAP技术分享

ABAP和Java单例模式的攻防

然而我只需要将这个单例类JerrySingleton的构造函数通过反射设置成可以访问Accessible,然后就能通过反射调用该构造函数,进而生成新的对象实例。...

18440
来自专栏伦少的博客

打印(获取)HDFS路径下所有的文件名(包括子目录下的)

自己有个需求,如题,需要获取HDFS路径下所有的文件名,然后根据文件名用Spark进行后续操作。想了一下用Spark好像不太容易获取到,还要递归的去获取子目录下...

33410
来自专栏Greenplum

Greenplum 对JSON的支持

源文章:http://www.postgresqltutorial.com/postgresql-json/

8810
来自专栏java相关

javax顶层接口分析

11330
来自专栏*坤的Blog

自写文件小工具类

18930

扫码关注云+社区

领取腾讯云代金券