专栏首页python全栈布道师django框架orm层api简单总结

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),作者:CheungChan

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 处理只想本地修改配置文件不想提交到远程的shell脚本(修改版)

    阿章-python小学生
  • 关于python装饰器可能是最全的一篇文章(包括有用的例子)

    一个常见错误是使用装饰器时不保存函数元数据(文档字符串和函数名字), 装饰器返回的是新函数,失去了函数元数据.

    阿章-python小学生
  • selenium调用chromedriver禁用flash时遇到的深坑

    阿章-python小学生
  • 又一个登陆框引起的血案

    必看的肯定要属HTML源代码了,源代码里包含了下面所说的JS文件。HTML源代码会泄露很多信息,像程序员未删除的注释、敏感路径等都可能在HTML源代码中找的到,...

    FB客服
  • StringBleed:SNMP协议“上帝模式”漏洞影响多种网络设备

    近期,据来自南美的两位安全研究者发现,SNMP(简单网络管理协议)的v1和v2版本协议存在授权认证和访问控制绕过漏洞,至少有78种型号的网络接入和IoT设备受此...

    FB客服
  • mybatis框架一级和二级缓存

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    多凡
  • 内存的分类

    一:SDRAM SDRAM(Synchronous Dynamic Random Access Memory),同步动态随机存储器,同步是指 Memory工作需...

    233333
  • Hibernate 的一级缓存

    qubianzhong
  • 二叉搜索树(BST)- HDU 3791

    二叉查找树(英语:Binary Search Tree),也称二叉搜索树、有序二叉树(英语:ordered binary tree),排序二叉树(英语:sor...

    ACM算法日常
  • 【小白学C#】谈谈C#多播委托因异常而终止的解决方案

      前几天,马三在与朋友闲聊技术的时候,朋友忽然抛出一个问题,把马三难倒了,本着求知的精神,回来以后马三就查阅了相关资料并做了一些实验,终于把问题搞明白了,因此...

    马三小伙儿

扫码关注云+社区

领取腾讯云代金券