Phi*_*hil 2 python sql sqlalchemy
我有一个4列(1 PK)的表,我需要从中选择30行.在这些行中,两列(col.A和B)必须存在于另一个表中(8列,1 PK,2是A和B).
第二个表很大,包含数百万条记录,这足以让我知道是否存在包含col值的单行.第1桌的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()
Run Code Online (Sandbox Code Playgroud)
这个查询得到了我想要的结果,但是我担心它可能会有点慢,因为它并不意味着有效的a limit条件,exists()也不是select 1一个select *.
exists() does not accept a .limit(1)
Run Code Online (Sandbox Code Playgroud)
如何对存在设置限制以使其不要查找整个表,从而使此查询运行得更快?
谢谢
你可以使用这里提到的更明确的形式来做"选择1"的事情,也就是说,
exists([1]).where(...)
Run Code Online (Sandbox Code Playgroud)
然而,虽然我一直是一个长期顽固的"选择1"类型的人,但我已经了解到"1"与"*"的表现现在是一个神话(更多/更多).
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)
Run Code Online (Sandbox Code Playgroud)