Django入门-基本数据库API
- # 现在系统里还没有 Question 对象
- >>> Question.objects.all()
- <QuerySet []>
- # 创建新 Question
- # 在 settings 文件里,时区支持被设为开启状态,所以
- # pub_date 字段要求一个带有时区信息(tzinfo)
- # 的 datetime 数据。请使用 timezone.now() 代替
- # datetime.datetime.now(),这样就能获取正确的时间。
- >>> from django.utils import timezone
- >>> q = Question(question_text="What's new?", pub_date=timezone.now())
- # 想将对象保存到数据库中,必须显式的调用 save()。
- >>> q.save()
- # 现在它被分配了一个 ID。注意有可能你的结果是“1L”而不是“1”,
- # 这取决于你在使用哪种数据库。这不是什么大问题;只是表明
- # 你所用的数据库后端倾向于将整数转换为 Python 的
- # long integer 对象。
- >>> q.id
- 1
- # 通过属性来获取模型字段的值
- >>> q.question_text
- "What's new?"
- >>> q.pub_date
- datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)
- # 通过改变属性值来改变模型字段,然后调用 save()。
- >>> q.question_text = "What's up"
- >>> q.save()
- # objects.all() 显示数据库中所有 question。
- >>> Question.objects.all()
- <QuerySet [<Question: Question object>]>
- # 确认添加的 __str__() 是否正常工作。
- >>> Question.objects.all()
- <QuerySet [<Question: What's up?>]>
- # Django 提供了丰富的数据库查找 API,
- # 通过关键字参数就能轻松使用。
- >>> Question.objects.filter(id=1)
- <QuerySet [<Question: What's up?>]>
- >>> Question.objects.filter(question_text__startswith='What')
- <QuerySet [<Question: What's up?>]>
- # 获取今年发布的问题
- >>> from django.utils import timezone
- >>> current_year = timezone.now().year
- >>> Question.objects.get(pub_date__year=current_year)
- <Question: What's up?>
- # 查找一个不存在的 ID 将会引发异常
- >>> Question.objects.get(id=2)
- Traceback (most recent call last):
- ...
- DoesNotExist: Question matching query does not exist.
- # 通过主键来查找数据是非常常见的需求,所以 Django
- # 为这种需求专门制定了一个参数。
- # 以下代码等同于 Question.objects.get(id=1)。
- >>> Question.objects.get(pk=1)
- <Question: What's up?>
- # 确认我们自定义的方法正常工作。
- >>> q = Question.objects.get(pk=1)
- >>> q.was_published_recently()
- True
- # 给这个问题添加几个选项。create 函数会创建一个新的
- # Choice 对象,执行 INSERT 语句,将 Choice 添加到
- # Question 的选项列表中,最后返回刚刚创建的
- # Choice 对象。Django 创建了一个集合 API 来使你可以从
- # 外键关系的另一方管理关联的数据。
- # (例如,可以获取问题的选项列表)
- >>> q = Question.objects.get(pk=1)
- # 显示所有和当前问题关联的选项列表,现在是空的。
- >>> q.choice_set.all()
- <QuerySet []>
- # 创建三个选项。
- >>> 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()
- [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]
- >>> q.choice_set.count()
- 3
- # 查找 API 的关键字参数可以自动调用关系函数。
- # 只需使用双下划线来分隔关系函数。
- # 只要你想,这个调用链可以无限长。
- # 例如查找所有「所在问题的发布日期是今年」的选项
- # (重用我们之前创建的 'current_year' 变量)
- >>> Choice.objects.filter(question__pub_date__year=current_year)
- [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]
- # 试试删除一个选项,使用 delete() 函数。
- >>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
- >>> c.delete()
- 官方地址:https://docs.djangoproject.com/en/1.11/topics/db/queries/
Django入门-基本数据库API的更多相关文章
- Django入门4 数据库设计
创建mxonline虚拟环境 C:\Users\ws>mkvirtualenv mxonline (mxonline) D:\python\djangostart>pip install ...
- Django入门:操作数据库(Model)
Django-Model操作数据库(增删改查.连表结构) 一.数据库操作 1.创建model表 基本结构 1 2 3 4 5 6 from django.db import model ...
- 关于Django中的数据库操作API之distinct去重的一个误传
转载自http://www.360doc.com/content/18/0731/18/58287567_774731201.shtml django提供的数据库操作API中的distinct()函数 ...
- Django入门教程(二)
建议直接阅读末尾!!! Writing your first Django app, part 2 本节将设置数据库,创建您的第一个模型(model),并简单介绍Django自动生成的管理页面. 数据 ...
- 【Python全栈-后端开发】Django入门基础
Django基础知识 一. 什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的 ...
- Django框架----ORM数据库操作
一.ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用 ...
- Django入门与实践 17-26章总结
Django入门与实践-第17章:保护视图 Django 有一个内置的视图装饰器 来避免它被未登录的用户访问: 现在如果用户没有登录,将被重定向到登录页面: 现在尝试登录,登录成功后,应用程序会跳转到 ...
- python web框架Django入门
Django 简介 背景及介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以 ...
- django入门 -- 简单流程
django入门 -- 简单流程 简介 通过简单示例,使用django完成基本流程的开发,学习django的主要的知识点,在后续课程中会逐个知识点进行深入讲解 以“图书-英雄”管理为示例 主要知识点介 ...
随机推荐
- HTML/CSS 知识点
整个前端开发的工作流程 产品经理提出项目需求 UI出设计稿 前端人员负责开发静态页面(跟前端同步的后台人员在准备数据) 前后台的交互 测试 产品上线(后期项目维护) 互联网原理 当用户在浏览器输入网址 ...
- MSSql Server 批量插入数据优化
针对批量入库, .Net Framework 提供了一个批量入库Class : SqlBulkCopy , 批量入库性能不错,经测试 四万左右数据 2秒入库. 以下是测试Demo , 使用外部传入事 ...
- Java经典编程题50道之十六
输出九九乘法表. public class Example16 { public static void main(String[] args) { table(9); } ...
- UVA - 1220 Party at Hali-Bula 树的最大独立集
题意: 给定n个人,存在上下级关系,每个人只有一个上级,求最大独立集.并判断最大独立集是否唯一 思路:d[i][0]表示以i为根的子树中,不选择第i个节点的最大独立集,f[i][0]表示以i为根的子 ...
- Codeforces103D - Time to Raid Cowavans
Portal Description 给出长度为\(n(n\leq3\times10^5)\)的序列\(\{a_n\}\),进行\(q(q\leq3\times10^5)\)次询问:给出\(x,y\) ...
- mex (离散化+线段树)
Time Limit: 3000 ms Memory Limit: 256 MB Description 给你一个无限长的数组,初始的时候都为0,有3种操作: 操作1是把给定区间$[l,r]$设为 ...
- Ansible自动化运维笔记1(安装配置)
1.Ansible的安装 pip install ansible==1.9.1 ansible1.9.1版本依赖的软件有 Python2.6以上版本 paramiko模块 PyYAML Jinja2 ...
- 剑指offer 第九天
35.数组中的逆序对 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出 ...
- 从零开始学习前端JAVASCRIPT — 12、JavaScript面向对象编程
一.构造函数的使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- Qemu,KVM,Virsh傻傻的分不清
当你安装了一台Linux,想启动一个KVM虚拟机的时候,你会发现需要安装不同的软件,启动虚拟机的时候,有多种方法: virsh start kvm命令 qemu命令 qemu-kvm命令 qemu-s ...