一 在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. nginx.conf 配置 (反向代理,负载均衡,fastdfs model)

    #user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/error.log notice;#error_l ...

  2. mysql安装报vcruntime140.dll缺失

    mysql安装报:vcruntime140.dll缺失 安装:Visual C++ Redistributable for Visual Studio 2015 可以解决此问题

  3. yii findAll方法

    $users = $this->user->find(array( 'select'=>array('id','username','email'), 'order' => ' ...

  4. Git(4):远程仓库

    添加\连接远程库 目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作. 你就需要将数据放到一台其他开发人员能够连接的服务器上. 远程仓库可以是Git ...

  5. Docker监控容器资源的占用情况

    启动一个容器并限制资源 启动一个centos容器,限制其内存为1G ,可用cpu数为2 [root@localhost ~]# docker run --name os1 -it -m 1g --cp ...

  6. Es性能优化

    1. Es中10亿级别的数据量,如何提高查询效率 (1) 性能优化关键:file system cache a. 不要期待随手挑一个参数,就可以万能的应对所有性能慢的场景 b. es依赖于底层的fil ...

  7. 如果Mysql插入字符始终乱码怎么办?

    1.找到my.cnf [root@Sliver-Code ~]# vi /etc/my.cnf 加入下面三行语句 [client] default-character-set=utf8 [mysqld ...

  8. 随笔--第一次使用crontab linux选择编辑器问题

    第一次使用crontab 时,会出现:no crontab for root - using an empty one “Select a editor ......”下面有几个选项,就是叫你选择编辑 ...

  9. My life

    突然想到的好笑的: 1. 世界上一共有10种人,一种是男人,另一种是女人 2. 吐槽一个网站的域名: 你这网站域名取得,跟色情网站似的 明知这是一场意外,你要不要来,明知这是一场重伤害,你会不会来: ...

  10. nginx 增加认证

    1.检查工具是否安装,如果未安装则使用yum安装 #htpasswd 有以上输出表示已经安装,如果没有按装,使用如下命令安装: #yum -y install httpd-tools 2.htpass ...