python条件查询 或 in_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 "" % (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進行反向引用了。
總結
以上是生活随笔為你收集整理的python条件查询 或 in_64.Python中ORM查询条件:in和关联模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: caliop 数据可视化_星载激光雷达C
- 下一篇: oracle大对象实例_Oracle解析