64.Python中ORM查询条件:in和关联模型
定义模型的models.py文件中示例代码如下:
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=100)
class Meta:
db_table = 'category'
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
category = models.ForeignKey('Category', on_delete=models.CASCADE, null=True)
def __str__(self):
return "<(Article: id: %s,title: %s, content: %s)>" % (self.id, self.title, self.content)
class Meta:
db_table = 'article'
1.in:查找某个字段的数据是否在某个集合中。示例代码如下:
from django.http import HttpResponse
from .models import Article, Category
def index(request):
# 查找id为1,2,3的文章
articles = Article.objects.filter(id__in=[1,2,3])
for article in articles:
print("%s, %s, %s"%(article.id, article.title, article.content))
# 1, Hello, 你好
# 2, Hello World, 大家好
# 3, 钢铁是怎样炼成的, 你好
# 打印出sql语句:
print(articles.query)
# SELECT `article`.`id`, `article`.`title`, `article`.`content` FROM `article` WHERE `article`.`id` IN (1, 2, 3)
return HttpResponse("success")
2. in: 查找另一张表中的字段是否在某个集合中。查找id为1,2,3的文章的分类,示例代码如下:
def index(request):
# in:查找id为1,2,3的文章的分类
# 涉及到两个表
# 父表Category可以通过子表名字的小写形式进行访问子表,同样如果不想使用默认的名字进行访问,
# 可以在指定外键的时候指定参数related__query__name='articles',之后就可以通过articles进行访问子表了。
categorys = Category.objects.filter(article__id__in=[1,2,3])
# 如果你判断的模型的字段就是模型的主键,那么就可以使用article__in
categorys = Category.objects.filter(article__in=[1,2,3])
for category in categorys:
print("%s, %s"%(category.id, category.name))
# 1, 最新文章
#
# 2, 最热文章
# 3, 高评分文章
print(categorys.query)
# SELECT `category`.`id`, `category`.`name` FROM `category` INNER JOIN `article` ON (`category`.`id` = `article`.`category_id`) WHERE `article`.`id` IN (1, 2, 3)
return HttpResponse("success")
3. 查找标题中包含“hello”的文章的分类,示例代码如下:
# 查找标题中包含“hello”的文章的分类
# 首先将标题中包含hello的文章查询出来
articles = Article.objects.filter(title__icontains="hello")
# 之后查找这些文章的分类
categorys = Category.objects.filter(article__id__in=articles)
for category in categorys:
print(category)
# Category object (1)
# Category object (2)
print(categorys.query)
# SELECT `category`.`id`, `category`.`name` FROM `category` INNER JOIN `article` ON (`category`.`id` = `article`.`category_id`) WHERE `article`.`id` IN (SELECT U0.`id` FROM `article` U0 WHERE U0.`title` LIKE %hello%)
return HttpResponse("success")
总结:1. 在父表(category)对子表(article)进行反向查询的时候,默认情况下可以通过子表名字的小写形式进行查询。如果不想使用默认的,同样可以在定义外键的时候,指定参数related_query_name='articles',之后就可以使用articles进行反向查询子表了。
2. 父表对子表进行反向引用,默认情况下可以通过“子表的名字的小写形式_set”进行反向引用。如果不想使用默认的这种形式,同样可以在定义外嫁的时候指定参数related_name='articles',之后就可以通过articles进行反向引用了。
64.Python中ORM查询条件:in和关联模型的更多相关文章
- hibernate中带查询条件的分页
所谓分页,从数据库中分,则是封装一个分页类.利用分页对象进行分页. 但,分页往往带查询条件. 分页类的三个重要数据:[当前页码数],[数据库中的总记录数],[每页显示的数据的条数] 原理:select ...
- exp导出一个表中符合查询条件的数据
原文地址:exp导出一个表中符合查询条件的数据 作者:charsi 导出一个表中的部分数据,使用QUERY参数,如下导出select * from test where object_id>50 ...
- Python学习---ORM查询之基于对象的正向/反向/聚合/分组/Q/F查询
ORM查询之基于对象的正向查询与反向查询 对象形式的查询 # 正向查询 ret1=models.Book.objects.first() print(ret1.title) print(ret1.pr ...
- Python - Django - ORM 查询方法
models.py: from django.db import models class Human(models.Model): id = models.AutoField(primary_key ...
- 48.Python中ORM模型实现mysql数据库基本的增删改查操作
首先需要配置settings.py文件中的DATABASES与数据库的连接信息, DATABASES = { 'default': { 'ENGINE': 'django.db.backends.my ...
- ORM查询条件
模板: from django.db import models class Article(models.Model): title = models.CharField(max_length=20 ...
- 67.ORM查询条件:range的使用,使用make_aware将navie time 转换为aware time
模型的定义,models.py文件中示例代码如下: from django.db import models # 在定义模型的类时,一定要继承models.Model class Category(m ...
- 69.ORM查询条件:isnull和regex的使用
首先查看数据库中的article表的数据: 定义模型的文件models.py中的示例代码如下: from django.db import models class Category(models.M ...
- python中orm框架学习
安装sqlalchemy pip3 install sqlalchemy 创建表结构: from sqlalchemy import Column,String,create_engine from ...
随机推荐
- unity3d Asset Store下载的资源在哪?
win7 C:\Users\(用户名)\AppData\Roaming\Unity\Asset Store\ 用户名为中文的时候,是不能直接在unity3d中打开的.
- 统计学习方法——KD树最近邻搜索
李航老师书上的的算法说明没怎么看懂,看了网上的博客,悟出一套循环(建立好KD树以后的最近邻搜索),我想应该是这样的(例子是李航<统计学习算法>第三章56页:例3.3): 步骤 结点查询标记 ...
- 吴裕雄--天生自然JAVA数据库编程:JDBC2.0操作
import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.SQLException ; import j ...
- FBV CBV
目录 CBV 和 FBV 介绍 路由绑定 urlpatterns = [ # 1)项目启动,将test函数地址绑定给/test/路由 # 2)请求/test/访问后台,后台就会调用绑定的test函数 ...
- Oracle 的DBA考证
转自 :https://www.cnblogs.com/chunge2050/archive/2013/04/16/3023730.html 详细的了解了几天之后,总结起来就是oracle为DBA认证 ...
- kubernetes 1.17.2 结合 Ceph 13.2.8 实现 静态 动态存储 并附带一个实验
关于部署和相关原理 请自行搜索 这里 给出我的操作记录和排查问题的思路 这一节对后面的学习有巨大的作用!!! [root@bs-k8s-ceph ~]# ceph -s cluster: -1a9a- ...
- centos7 程序快捷方式
/usr/share/Applications 在此文件夹中,全是".desktop"的文件,利用终端打开一个看看就知道了!
- 阿里云https+nginx服务搭建
购买证书 通过控制台进入CA证书服务,点击右上角的购买证书,进入如下图的界面,选择免费的Symantec的DV SSL. 一路点过去,然后回到证书服务主页,会出现一条订单信息,点击补全,如下图所示. ...
- 创建springboot2.1项目运行报错
刚创建好一个项目,运行就报错:in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging ...
- jdbc oracle 连接串
jdbc.url配置为: jdbc:oracle:thin:@xxx.xx.xx.xx:1521:orclpdb 报错: java.sql.SQLException: Listenerrefused ...