python - 尝试通过中间表进行过滤

标签 python postgresql sqlalchemy

我正在尝试执行此查询

subsidiaries = self.con.query(Subsidiary)\
                    .options(joinedload(Subsidiary.commerce)\
                             .joinedload(Commerce.commerce_tags))\
                    .filter(CommerceTag.tag_id == id)

但是不行,所以解释一下:

表之间的关系是:

Relationship

我只想获得所有具有特定标签的商业的所有子公司,我想用 Subsidiary 有基类来做(我知道如果我使用 Commerce 会更容易),原因是因为我将其转换为具有以下格式的 json 值:

"subsidiaries": [
    {
        "id": 1,
        "name": "some_name",
        "commerce": {
            "id": 1,
            "name": "Commerce Name"
        }
    }
]

好吧,我可以使用 Commerce 的基类进行查询,但我认为可能迭代 commerces 以获取子公司比在查询中这样做更昂贵。

我不想加载 CommerceTag,但我在 joinedload 中加载了它,因为它不适用于 Join 方法。

我需要一些帮助才能做到这一点:(

最佳答案

这样试试:

subsidiaries = session.query(Subsidiary)\
                .join(Subsidiary.commerce)\
                .join(Commerce.commerce_tags)\
                .filter(CommerceTag.id == id)

您的语句生成如下查询:

SELECT subsidiary.id AS subsidiary_id, subsidiary....
FROM tag, subsidiary
LEFT OUTER JOIN commerce AS commerce_1 
    ON subsidiary.id = commerce_1.subsidiary_id
LEFT OUTER JOIN (
    tags_by_commerce AS tags_by_commerce_1
    JOIN tag AS tag_1 ON tag_1.id = tags_by_commerce_1.id_tag
) ON commerce_1.id = tags_by_commerce_1.id_commerce
WHERE tag.id = :id_1

所以标签过滤没有效果。

我提议的声明生成了这个:

SELECT subsidiary.id AS subsidiary_id, subsidiary.name AS subsidiary_name
FROM subsidiary 
JOIN commerce ON subsidiary.id = commerce.subsidiary_id
JOIN tags_by_commerce AS tags_by_commerce_1 ON commerce.id = tags_by_commerce_1.id_commerce
JOIN tag ON tag.id = tags_by_commerce_1.id_tag
WHERE tag.id = :id_1

关于python - 尝试通过中间表进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35447296/

相关文章:

python - 创建特定大小的可能组合

node.js - heroku bash 无法识别 sequelize 命令

postgresql - 从 Aqueduct 应用程序获取上次修改日期时间的最轻量级方法是什么?

python - OSX El Capitan sqlalchemy 无法连接到 '127.0.0.1' (111) 上的 MySQL 服务器

python - 如何使用 SQLAlchemy 确定是否尚未加载惰性关系?

python - 使用 sqlalchemy 的 MySQL 空间索引?

python - 有没有更好的方法来处理 python 中的文件编码?

python - 按多列查询数据框?

python - 如何在附加数据上训练 (k-NN) 模型(为了绘制学习曲线)

sql - 订购以点分隔的数字序列(例如,版本号)