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