使用 SQLAlchemy 的“fetchone()”和“LIMIT 1”之间有区别吗

Fer*_*Wyk 6 sqlalchemy

当使用 SQLAlchemy 从数据库中检索行时,您可以使用

query = "SELECT some_col FROM some_table"

row = session.execute(query).fetchone()
Run Code Online (Sandbox Code Playgroud)

但是,您也可以这样做:

query = "SELECT some_col FROM some_table LIMIT 1"

row = session.execute(query).fetchall()
Run Code Online (Sandbox Code Playgroud)

是否有任何理由选择其中一种而不是另一种,例如更好的性能?

Bla*_*ack 2

第一个变体适用于所有 DBMS,第二个变体仅适用于支持非标准 LIMIT 关键字的 DBMS。因此,如果您想告诉数据库您希望将结果限制为一行,您最好使用 SQLAlchemy 核心而不是 SQL 语句作为字符串。就像是:

row = session.execute(select([some_table.c.some_col]).limit(1)).fetchone()
Run Code Online (Sandbox Code Playgroud)

如果您确实只查询一行和一列,您可能会考虑scalar()而不是fetchone()

value = session.execute(select([some_table.c.some_col]).limit(1)).scalar()
Run Code Online (Sandbox Code Playgroud)