【发布时间】:2018-01-14 08:38:06
【问题描述】:
我正在尝试运行一个根据字典列表过滤结果的查询。
让我们更清楚...
我有一个表格 Heading,每个 Heading 都有一个版本字段
class Heading(Base):
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
version = Column(Integer)
另一方面,我有一个如下所示的 dict 列表(Json 格式):
"headings": [
{
"id": 1,
"version": 1
},
{
"id": 2,
"version": 1
}
]
我想对 Heading 表执行查询,排除数据库中的版本等于 (json) 列表中的版本的行。
我尝试执行如下操作:
res = Heading.query.filter(~Heading.id.in_([d['id'] for d in headings if d['version'] == Heading.version])).all()
数据库看起来像这样(Json 再次格式化,抱歉):
[
{
"id": 1,
"name": "Heading1",
"version": 2,
},
{
"id": 2,
"name": "Heading2",
"version": 1,
}
]
但无论如何它都会返回 Heading2 行。基本上,我希望查询返回 Json 中未定义的所有行以及数据库中具有较新版本的行。
我不知道我的问题是否足够清楚。 也许这不是正确的方法,请告诉我
提前感谢您的帮助
编辑: 生成的 Raw SQL 是这样的:
SELECT heading.id, heading.name, heading.version
FROM heading
WHERE heading.id = heading.id
所以 sqlalchemy 查询有一个明显的问题,但我不知道是什么...
我认为它来自部分
if d['version'] == Heading.version
但我不知道如何在查询的其他地方重新表述这个条件
【问题讨论】:
-
您也可以发布原始 SQL 查询吗?
标签: python json list dictionary sqlalchemy