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



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

query = "SELECT some_col FROM some_table"
row = session.execute(query).fetchone()

但是,您也可以执行以下操作:

query = "SELECT some_col FROM some_table LIMIT 1"
row = session.execute(query).fetchall()

有什么理由偏爱一个而不是另一个,例如更好的性能?

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

row = session.execute(select([some_table.c.some_col]).limit(1)).fetchone()

如果您真的只查询一行只有一列,您可能会考虑scalar()而不是fetchone()

value = session.execute(select([some_table.c.some_col]).limit(1)).scalar()

最新更新