.one() 和 .first() 有什么区别
What is the difference between .one() and .first()
SQLAlchemy 中的one
和first
方法有什么区别
Query.one()
要求结果集中只有一个个结果;如果数据库 return 有 0 个或 2 个或更多个结果,则会引发异常。
Query.first()
return 是第一个可能更大的结果集(将 LIMIT 1
添加到查询),或者 None
如果没有结果。不会引发异常。
来自 Query.one()
的文档:
Return exactly one result or raise an exception.
Return the first result of this Query or None if the result doesn’t contain any row.
(强调我的)。
根据 Python 列表,one()
将是:
def one(lst):
if not lst:
raise NoResultFound
if len(lst) > 1:
raise MultipleResultsFound
return lst[0]
而 first()
将是:
def first(lst):
return lst[0] if lst else None
还有一个Query.one_or_none()
方法,只有当查询有多个结果时才会抛出异常。否则它将 return 单个结果,或者 None
如果没有结果。
用列表术语来说,这相当于:
def one_or_none(lst):
if not lst:
return None
if len(lst) > 1:
raise MultipleResultsFound
return lst[0]
SQLAlchemy 中的one
和first
方法有什么区别
Query.one()
要求结果集中只有一个个结果;如果数据库 return 有 0 个或 2 个或更多个结果,则会引发异常。
Query.first()
return 是第一个可能更大的结果集(将 LIMIT 1
添加到查询),或者 None
如果没有结果。不会引发异常。
来自 Query.one()
的文档:
Return exactly one result or raise an exception.
Return the first result of this Query or None if the result doesn’t contain any row.
(强调我的)。
根据 Python 列表,one()
将是:
def one(lst):
if not lst:
raise NoResultFound
if len(lst) > 1:
raise MultipleResultsFound
return lst[0]
而 first()
将是:
def first(lst):
return lst[0] if lst else None
还有一个Query.one_or_none()
方法,只有当查询有多个结果时才会抛出异常。否则它将 return 单个结果,或者 None
如果没有结果。
用列表术语来说,这相当于:
def one_or_none(lst):
if not lst:
return None
if len(lst) > 1:
raise MultipleResultsFound
return lst[0]