gpt4 book ai didi

python - SQLAlchemy 选择存在限制

转载 作者:行者123 更新时间:2023-11-28 21:25:16 25 4
gpt4 key购买 nike

我有一个包含 4 列 (1 PK) 的表格,我需要从中选择 30 行。在这些行中,两列(A 列和 B 列)必须存在于另一个表中(8 列,1 个 PK,2 个是 A 和 B)。

第二个表很大,包含数百万条记录,这足以让我知道是否存在包含 col 值的行。第一个表的 A 和 B。

我正在使用下面的代码:

query = db.Session.query(db.Table_1).\
filter(
exists().where(db.Table_2.col_a == db.Table_1.col_a).\
where(db.Table_2.col_b == db.Table_2.col_b)
).limit(30).all()

这个查询得到了我想要的结果,但是我担心它可能会有点慢,因为它并不意味着 exists() 函数的 a limit 条件,也不它会执行 select 1 还是 select *

exists() does not accept a .limit(1)

我如何限制 exists 使其不查找整个表,从而使该查询运行得更快?

  • 我需要 Table_1 中的 n 行,其中 2 列存在于一条记录表_2

谢谢

最佳答案

您可以使用它提到的更明确的形式来执行“选择 1”操作 here , 即

exists([1]).where(...)

然而,虽然我长期以来一直是“select 1”那种顽固的人,但我后来了解到“1”与“*”在性能方面的用法现在是a myth。 ( more/more )。

exists() 也是 select() 的包装器,因此您可以通过先构造 select() 来获得 limit():

s = select([1]).where(
table1.c.col_a == table2.c.colb
).where(
table1.c.colb == table2.c.colb
).limit(30)
s = exists(s)

关于python - SQLAlchemy 选择存在限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com