有什么办法可以使用 in_() 查询过滤列表中的每个 ID(包括重复项)吗?

问题描述 投票:0回答:1

我正在尝试使用 SQLAlchemy 做这样的事情:

Cards.query.filter(Cards.id.in_(inventory_cards)).paginate(page=page, per_page=50)

但是 in_() 运算符仅检查 id 是否在列表中并忽略重复项。我见过类似的问题,但不是很清楚,或者是 2014 年的问题。

我尝试的解决方案是使用列表理解循环它,但由于结果是一个列表,我之后无法应用分页。 (除了速度慢得多之外,因为要对每个 id 进行查询,而且有时库存中有数千张卡片)

如果有人知道一个好的解决方案,我将非常感激。

非常感谢。

python flask sqlalchemy flask-sqlalchemy
1个回答
0
投票

我相信您需要的是

JOIN
,而不是
WHERE...IN
子句。

使用库存卡创建一个临时表并加入其中。临时表中每次重复

id
都会导致从 Cards 表中提取所有匹配的行。

我正在编写 SQL,因为我不知道正确的 SQLAlchemy 语法。

CREATE TEMP TABLE inventory_cards (
  id int
);
INSERT INTO inventory_cards VALUES ((1), (2), (3), (1), (2));
SELECT * FROM Cards JOIN inventory_cards USING (id);

似乎有一个

values()
函数可以创建表文字,所以我的猜测是它类似于:

Cards.query.join(
  values(column("id", Integer)).data(inventory_cards)
).paginate(page=page, per_page=50)

© www.soinside.com 2019 - 2024. All rights reserved.