django如何跨表查询

场景是这样:一个泵房表包含所有泵房,一个巡检表中包含已巡检的泵房,要查询未巡检的泵房,怎么写语句?models.py和views.py如下图在views.py中查询未巡检... 场景是这样:一个泵房表包含所有泵房,一个巡检表中包含已巡检的泵房,要查询未巡检的泵房,怎么写语句?models.py和views.py如下图在views.py中查询未巡检泵房的语句怎么写??
没获得到帮助
看了两天资料,终于找到方法,
使用字段查询in
a4=Xunjian.objects.values('bengfang')
a3=Bengfang.objects.exclude(id__in=a4).values('name')
print(a3)
可看到未巡检的泵房。
in的用法可百度刘江的博客和教程,在‘第一章,模型层’中的‘字段查询参数和聚合函数’
展开
 我来答
腾讯电脑管家
2019-01-05 · 百度知道官方认证企业
腾讯电脑管家
腾讯电脑管家是腾讯公司推出的免费安全管理软件,能有效预防和解决计算机上常见的安全风险,并帮助用户解决各种电脑“疑难杂症”、优化系统和网络环境,是中国综合能力最强、最稳定的安全软件。
向TA提问
展开全部
1、 表的名称myapp_modelName,是根据 模型中的元数据自动生成的,也可以覆写为别的名称  
2、id 字段是自动添加的
3、对于外键字段,Django 会在字段名上添加"_id" 来创建数据库中的列名
4、这个例子中的CREATE TABLE SQL 语句使用PostgreSQL 语法格式,要注意的是Django 会根据settings 中指定的数据库类型来使用相应的SQL 语句。
5、定义好模型之后,你需要告诉Django _使用_这些模型。你要做的就是修改配置文件中的INSTALL_APPSZ中设置,在其中添加models.py所在应用的名称。
6、外键字段 ForeignKey 有一个 null=True 的设置(它允许外键接受空值 NULL),你可以赋给它空值 None 。
ZESTRON
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸... 点击进入详情页
本回答由ZESTRON提供
GTA小鸡
高粉答主

2019-01-07 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部
  1. 用NOT EXISTS

SELECT * FROM bengfang WHERE NOT EXISTS(SELECT 1 FROM xunjian WHERE bengfang.id=xunjian.id)

Django对EXISTS语句的支持并不好,生成的查询语句往往包含冗余,不是我们想要的,因此这里最好用RAW SQL:

Bengfang.objects.extra(where=[
    'NOT EXISTS(SELECT 1 FROM "{xunjian}" WHERE "{bengfang}"."id"="{xunjian}"."bengfang_id")'.format(
        bengfang=Bengfang._meta.db_table,
        xunjian=Xunjian._meta.db_table
    )])

2.用LEFT OUTER JOIN

SELECT * FROM bengfang LEFT OUTER JOIN xunjian ON bengfang.id=xunjian.id WHERE xunjian.id=NULL

这个情况下需要双方存在外键关系,也就是Xunjian模型中需要有一个属性是Bengfang的外键,比如bengfang = models.ForeignKey('Bengfang', related_name='xunjian')

那么对应的ORM语句是:

Bengfang.objects.filter(xunjian=None)

用到了反向引用,查询语句非常简单,但是效率要比NOT EXISTS低一些。

3.用NOT IN

SELECT * FROM bengfang WHERE id NOT IN(SELECT bengfang_id FROM xunjian)

Bengfang.objects.exclude(pk__in=Xunjian.object.values('bengfang_id'))

要注意的是NOT IN是没有索引的,当表较大的时候NOT IN的效率是要远远低于NOT EXISTS的,因此从性能上讲尽量不要去用NOT IN。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式