使用SQLAlchemy在'fetchone()'和'LIMIT 1'之间有区别吗

时间:2019-01-15 16:00:53

标签: sqlalchemy

使用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()

是否有任何理由比另一个更喜欢一个更好的表现?

1 个答案:

答案 0 :(得分:0)

第一个变体适用于所有DBMS,第二个变体仅适用于支持LIMIT关键字(非标准)的那些。因此,如果要告诉数据库将结果限制为仅一行,则最好使用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()