如何通过pub_name获取book_name:SQL查询与Django QuerySet实现
通过出版社名称获取对应书籍名称的实现方式
SQL 查询语句
使用内连接关联两张表,通过出版社名称过滤并提取对应的书籍名称:
SELECT b.book_name FROM Book b INNER JOIN Publications p ON b.pub_id = p.id WHERE p.pub_name = '目标出版社名称';
如果存在多个同名出版社,上述语句会返回所有匹配该名称的出版社对应的书籍。
Django QuerySet 实现
前提:模型定义
先确保Django模型与数据库表对应,关联字段映射pub_id:
from django.db import models class Publications(models.Model): pub_name = models.CharField(max_length=255) class Meta: db_table = 'Publications' class Book(models.Model): book_name = models.CharField(max_length=255) pub = models.ForeignKey( Publications, on_delete=models.CASCADE, db_column='pub_id' ) class Meta: db_table = 'Book'
查询方式
- 反向关联查询
先定位目标出版社对象,再查询其关联的书籍:
# 若存在多个同名出版社,建议用filter替代get pub = Publications.objects.get(pub_name='目标出版社名称') # 提取所有对应的书籍名称列表 book_names = Book.objects.filter(pub=pub).values_list('book_name', flat=True)
- 跨模型链式过滤
直接通过双下划线跨模型过滤,一步获取结果:
# 直接过滤并提取书籍名称 book_names = Book.objects.filter(pub__pub_name='目标出版社名称').values_list('book_name', flat=True)
如果需要完整的Book对象而非仅名称,去掉.values_list('book_name', flat=True)即可。
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

