一 在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 数据查询详解的更多相关文章

  1. django ORM 外键详解

    Django中的外键: 首先,为了方便理解,我们把使用ForeignKey的字段所在的表定义为从表,把ForeignKey中to参数连接的表称为主表. 外键使用的先决条件: 在mysql数据表中,数据 ...

  2. Django学习笔记之Django ORM Aggregation聚合详解

    在当今根据需求而不断调整而成的应用程序中,通常不仅需要能依常规的字段,如字母顺序或创建日期,来对项目进行排序,还需要按其他某种动态数据对项目进行排序.Djngo聚合就能满足这些要求. 以下面的Mode ...

  3. MongoDB数据查询详解

    查询全部 ​ db.infos.find(); db.infos.find({"url":"www.baidu.com"}); id不要显示出来 db.info ...

  4. Hive 学习之路(八)—— Hive 数据查询详解

    一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件emp.txt和dept.txt可以从本仓库的resources目录下载. 1.1 员工表 -- 建表语句 CREAT ...

  5. Hive 系列(八)—— Hive 数据查询详解

    一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件 emp.txt 和 dept.txt 可以从本仓库的resources 目录下载. 1.1 员工表 -- 建表语句 ...

  6. 入门大数据---Hive数据查询详解

    一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件 emp.txt 和 dept.txt 可以从本仓库的resources 目录下载. 1.1 员工表 -- 建表语句 ...

  7. ORM 对表操作 详解

    目录 ORM对表操作详解 表结构 ORM对表的 增 删 改 查 基于对象的跨表查询 -- 类似于子查询 基于双下划的跨表查询 -- 连表 join ORM对表的操作示例 正向查 与 反向查 relat ...

  8. Django框架 之 querySet详解

    Django框架 之 querySet详解 浏览目录 可切片 可迭代 惰性查询 缓存机制 exists()与iterator()方法 QuerySet 可切片 使用Python 的切片语法来限制查询集 ...

  9. ElasticSearch第四步-查询详解

    ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...

随机推荐

  1. C#txt文件创建并写入信息

    public static void LogWrite(string str) { //项目根目录 string path = HttpContext.Current.Server.MapPath(& ...

  2. delphi stringgrid导出为excel

    procedure TLiYQBYJL.btnBYJLTJDCClick(Sender: TObject); var ExcelApp, workbook, sheet: Variant; col, ...

  3. Realm学习总结

    参考博客: http://www.jianshu.com/p/096bec929f2a http://www.cnblogs.com/ilyy/p/5648051.html 参考的博客介绍很详细,我就 ...

  4. express服务端

    1. 使用 Node.js + Express 开发服务端 2. 使用 Node.js + Express+MySQL 实现简单的增删改查 3. 初识NodeJS服务端开发(Express+MySQL ...

  5. .Netcore 2.0 Ocelot Api网关教程(2)- 路由

    .Netcore 2.0 Ocelot Api网关教程(1) 路由介绍 上一篇文章搭建了一个简单的Api网关,可以实现简单的Api路由,本文介绍一下路由,即配置文件中ReRoutes,ReRoutes ...

  6. Postman的安装和升级

    安装postman Postman本地应用程序 Postman可以作为Mac,Windows和Linux操作系统的本地应用程序. 要安装Postman,请转到应用界面,并根据你的平台点击Mac/Win ...

  7. 想了解Java后端学习路线?你只需要这一张图!

    前言 学习路线图往往是学习一样技术的入门指南.网上搜到的Java学习路线图也是一抓一大把. 今天我只选一张图,仅此一图,足以包罗Java后端技术的知识点.所谓不求最好,但求最全,学习Java后端的同学 ...

  8. 【VS开发】CreateThread给线程函数传递的参数

    CreateThread给线程函数传递的参数   HANDLE WINAPI CreateThread ( __in_opt LPSECURITY_ATTRIBUTES lpThreadAttribu ...

  9. [bzoj4818][Sdoi2017]序列计数_矩阵乘法_欧拉筛

    [Sdoi2017]序列计数 题目大意:https://www.lydsy.com/JudgeOnline/problem.php?id=4818. 题解: 首先列出来一个递推式子 $f[i][0]$ ...

  10. [转帖]基于docker 搭建Prometheus+Grafana

    基于docker 搭建Prometheus+Grafana https://www.cnblogs.com/xiao987334176/p/9930517.html need good study 一 ...