首页 > 解决方案 > (SQLALCHEMY):如何查询一个表以返回另一个表中不存在的项目(基于 7 个值主键)

问题描述

我有 2 个表,1 个原始数据 (raw_data) 和 1 个分数 (score_dlhs)。我想查询原始数据表以仅返回分数表中尚未计算的项目。

我需要查询的主键是 7 个字段复合键。我对 SQLAlchemy 的了解仍然很基础,但我假设我可以通过单个查询直接实现这一点?

这是我到目前为止所拥有的,但我不确定我的语法是否正确:

result = session.query(raw_data, ().join(score_dlhs, (raw_data.distance!=score_dlhs.distance) &
                                                    (raw_data.width!=score_dlhs.width) & 
                                                    (raw_data.height!=score_dlhs.height) & 
                                                    (raw_data.setback!=score_dlhs.setback) & 
                                                    (raw_data.potence!=score_dlhs.potence) & 
                                                    (raw_data.manufacturier!=score_dlhs.manufacturier) & 
                                                    (raw_data.model!=score_dlhs.model)).all()

标签: pythonsqljoinsqlalchemy

解决方案


我找到了解决方案:

蟒蛇版本:

      data_to_compute = (session.query(raw_data_uniformite_table).outerjoin(score_dlhs_table,(and_(score_dlhs_table.distance ==
                                                                                        raw_data_uniformite_table.distance, score_dlhs_table.largeur ==
                                                                                        raw_data_uniformite_table.largeur, score_dlhs_table.hauteur == raw_data_uniformite_table.hauteur,
                                                                                        score_dlhs_table.setback == raw_data_uniformite_table.setback, score_dlhs_table.potence ==
                                                                                        raw_data_uniformite_table.potence, score_dlhs_table.manufacturier == raw_data_uniformite_table.manufacturier,
                                                                                        score_dlhs_table.modele == raw_data_uniformite_table.modele))).filter(score_dlhs_table.distance == None)).all()

推荐阅读