我正在尝试使用 SQLAlchemy 做这样的事情:
Cards.query.filter(Cards.id.in_(inventory_cards)).paginate(page=page, per_page=50)
但是 in_() 运算符仅检查 id 是否在列表中并忽略重复项。我见过类似的问题,但不是很清楚,或者是 2014 年的问题。
我尝试的解决方案是使用列表理解循环它,但由于结果是一个列表,我之后无法应用分页。 (除了速度慢得多之外,因为要对每个 id 进行查询,而且有时库存中有数千张卡片)
如果有人知道一个好的解决方案,我将非常感激。
非常感谢。
我相信您需要的是
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)