django orm 数据查询详解
一 在django里面创建模型
from django.db import models class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField() def __str__(self): # __unicode__ on Python 2
return self.name class Author(models.Model):
name = models.CharField(max_length=200)
email = models.EmailField() def __str__(self): # __unicode__ on Python 2
return self.name class Entry(models.Model):
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
headline = models.CharField(max_length=255)
body_text = models.TextField()
pub_date = models.DateField()
mod_date = models.DateField()
authors = models.ManyToManyField(Author)
n_comments = models.IntegerField()
n_pingbacks = models.IntegerField()
rating = models.IntegerField() def __str__(self): # __unicode__ on Python 2
return self.headline
1.2 数据库里面的结构
需要注意多对多的中间表
1.3 创建对象
from blog.models import Blog

这里需要注意 一定要对属性的名字写上 另外save方法有括号
1.3 创建外键对象并保存

这里需要注意 blog是外键 这里只能赋值给一个外键的对象 或者数字1 2 3 4(代表外键的 对方的ID)
e.headline="my2 bolg"
e.body_text="test"
e.pub_date=datetime.date.today()
emod_date=datetime.date.today()
e.n_comments=12
e.pingbacks=20
e.eating=10
e.blog=b ##这里需要特别注意
e.save()

e.blog=1 这种写法存疑
1.4 多对多
john = Author.objects.create(name="John")
paul = Author.objects.create(name="Paul")
george = Author.objects.create(name="George")
ringo = Author.objects.create(name="Ringo")
e.authors.add(john, paul, george, ringo)
注意这里的对应关系存储在中间表中

二 检索对象
1.2 这里注意必须用类名 不能使用 对象名!!!

2.2 过滤
这里注意 有2个下划线 django的固定语法
>>> Entry.objects.filter(pub_date__year=2019)

<QuerySet [<Entry: my1 bolg>, <Entry: my2 bolg>]>
exclude 排除

过滤的结果都是列表 可以继续链式过滤
1.3 上面返回的都是列表 可以用get方法返回单一的值
这里需要注意 如果查询不到会抛出异常,多余一个也会抛出异常
1.4 外键关联查询
>>> from blog.models import Blog,Entry,Author
>>>
>>> Entry.objects.filter(blog__name="Beatles Blog1")
<QuerySet [<Entry: my1 bolg>]>
这里需要注意 可以通过blog(外键)找到对应的类 然后过滤属性 name="XXX"
反向关联
>>> Blog.objects.filter(entry__headline="my1 bolg")
<QuerySet [<Blog: Beatles Blog1>]>
这里一定要注意 filter后面的 是 关联的 类 的小写 名称entry!!!!!!!!
多条件同时反向查询!! 这里一定要注意 返回值是Blog对象 entry只是作为查询的邦族条件

3 F表达式
例如,为了查找comments数目多于pingbacks数目的Entry,可以构造一个F()对象来引用pingback数目,并在查询中使用该F()对象:
>>> from django.db.models import F
>>> Entry.objects.filter(n_comments__gt=F('n_pingbacks'))
django orm 数据查询详解的更多相关文章
- django ORM 外键详解
Django中的外键: 首先,为了方便理解,我们把使用ForeignKey的字段所在的表定义为从表,把ForeignKey中to参数连接的表称为主表. 外键使用的先决条件: 在mysql数据表中,数据 ...
- Django学习笔记之Django ORM Aggregation聚合详解
在当今根据需求而不断调整而成的应用程序中,通常不仅需要能依常规的字段,如字母顺序或创建日期,来对项目进行排序,还需要按其他某种动态数据对项目进行排序.Djngo聚合就能满足这些要求. 以下面的Mode ...
- MongoDB数据查询详解
查询全部 db.infos.find(); db.infos.find({"url":"www.baidu.com"}); id不要显示出来 db.info ...
- Hive 学习之路(八)—— Hive 数据查询详解
一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件emp.txt和dept.txt可以从本仓库的resources目录下载. 1.1 员工表 -- 建表语句 CREAT ...
- Hive 系列(八)—— Hive 数据查询详解
一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件 emp.txt 和 dept.txt 可以从本仓库的resources 目录下载. 1.1 员工表 -- 建表语句 ...
- 入门大数据---Hive数据查询详解
一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件 emp.txt 和 dept.txt 可以从本仓库的resources 目录下载. 1.1 员工表 -- 建表语句 ...
- ORM 对表操作 详解
目录 ORM对表操作详解 表结构 ORM对表的 增 删 改 查 基于对象的跨表查询 -- 类似于子查询 基于双下划的跨表查询 -- 连表 join ORM对表的操作示例 正向查 与 反向查 relat ...
- Django框架 之 querySet详解
Django框架 之 querySet详解 浏览目录 可切片 可迭代 惰性查询 缓存机制 exists()与iterator()方法 QuerySet 可切片 使用Python 的切片语法来限制查询集 ...
- ElasticSearch第四步-查询详解
ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...
随机推荐
- python之scrapy模块logging日志
1.知识点 """ logging : scrapy: settings中设置LOG_LEVEL="WARNING" settings中设置LOG_F ...
- python 实例方法、类方法和静态方法
#!/usr/bin/env python3.6 #-*- coding:utf-8 -*- # class Person(object): city = 'Beijing' def __init__ ...
- python 连接 hive
1.python连接hive,其实是连接hiveserver,连接的包的impyla impyla安装: error: cc1plus 没有文件或目录 需要安装gcc 和g++,并且版本保持一致 er ...
- [.NET] 一步步打造一个简单的 MVC 电商网站 - BooksStore(一) (转)
http://www.cnblogs.com/liqingwen/p/6640861.html 一步步打造一个简单的 MVC 电商网站 - BooksStore(一) 本系列的 GitHub地址:ht ...
- Spark任务踩到的坑
原因:文本编辑器导致多出来一个 “.”在首行
- Paper Mark
BigCowPeking的CSDN博客 https://blog.csdn.net/wfei101/article/category/7120809 Low Rank Structure of Lea ...
- 【笔记】《CNCF × Alibaba云原生技术公开课》知识点
一,课时1:第一堂“云原生”课 二,课时2:容器基本概念 1.已运行 docker run -d -t —name demo ubuntu top 命令, 是否可以在 demo 这个容器内部停止容器? ...
- SolidWorks学习笔记9 自顶向下方法
目的:制作一个轴承. 先创建一个零件作为一级控件,(草图)如下,是轴承的横截面. 创建内环. 新建一个零件,然后选择插入=>零件,选择“一级控件”零件 创建卡环,插入零件,选择一级控件 然后再旋 ...
- mybatis-plus代码生成器两版(全部生成+部分生成)
mybatis-plus代码生成器两版(全部生成+部分生成) 一次性生成全部文件 package com.layuicms.erp.utils; import java.util.List; impo ...
- 剑指offer7: 斐波那契数列第n项(从0开始,第0项为0)
1. 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 2. 思路和方法 斐波那契数列(Fibonacci sequen ...