博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django orm 数据查询详解
阅读量:5156 次
发布时间:2019-06-13

本文共 2303 字,大约阅读时间需要 7 分钟。

 

一 在django里面创建模型

from django.db import modelsclass Blog(models.Model):    name = models.CharField(max_length=100)    tagline = models.TextField()    def __str__(self):              # __unicode__ on Python 2        return self.nameclass Author(models.Model):    name = models.CharField(max_length=200)    email = models.EmailField()    def __str__(self):              # __unicode__ on Python 2        return self.nameclass 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=12e.pingbacks=20e.eating=10e.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")
]>

这里需要注意 可以通过blog(外键)找到对应的类 然后过滤属性 name="XXX"

 

 反向关联

>>> Blog.objects.filter(entry__headline="my1 bolg")
]>

 这里一定要注意 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'))

 

 

 

转载于:https://www.cnblogs.com/ZFBG/p/11348917.html

你可能感兴趣的文章
iOS设计模式-原型模式
查看>>
AutoMapper.EF6
查看>>
chrome使用技巧(看了定不让你失望)
查看>>
初步线程学习1
查看>>
php 上传csv文件
查看>>
谷歌火狐开发者工具学习
查看>>
hadoop性能优化
查看>>
C#的变迁史 - C# 1.0篇
查看>>
【日期控件】JQueryUI的datepicker日期控件
查看>>
java 方法调用绑定--《java编程思想》学习笔记
查看>>
oracle 用户 权限
查看>>
Oracle游标的使用方法以及使用for循环实现游标的原理
查看>>
20145205《Java程序设计》第四次实验:Android环境搭建
查看>>
238. Product of Array Except Self
查看>>
MongoDB索引的基本用法
查看>>
C# 知识点记录(持续更新中)
查看>>
js学习总结----指定步长实现单方向匀速运动
查看>>
87)PHP,PDO的预编译技术
查看>>
iOS开发必会的坐标系探究
查看>>
Unity编译Android的原理解析和apk打包分析
查看>>