在SQLAlchemy中,.one()和.scalar()的主要区别是什么,因为它们都做同样的工作。我看到一些网站,如tutorialpoint.com,但解释不足以让我明白
.one()
.scalar()
w46czmvw1#
SQLAlchemy有很好的文档。one()只返回一个结果或引发异常。如果查询未选择任何行,则引发sqlalchemy.orm.exc.NoResultFound。如果返回多个对象标识,或者对于仅返回标量值而不是完整标识Map实体的查询返回多行,则引发sqlalchemy.orm.exc. MultipleResultFound。在一个()方法上链接scalar()返回第一个结果的第一个元素;如果不存在行,则返回None。如果返回多行,则引发MultipleResultsFound。标量()方法上的链接。如果您有一些与SQLAlchemy相关的问题,我的建议是-首先,查看文档,因为它确实非常强大而且干净。
one()
scalar()
ct3nt3jp2#
以下是两者的区别以及使用时机:
何时使用one():
如果您有一个查询应该返回1个结果,否则将引发异常-即使它返回0个结果。* 换句话说,它不允许empty results。*
empty results
何时使用scalar():
如果查询返回1个结果或没有结果。否则抛出异常。* 换句话说,它不允许empty results。*
6rvt4ljy3#
在SQLAlchemy 2.0样式中,结果格式也不同。one()返回Row对象(命名元组):
Row
>>> session.execute(select(Note)).one() (<Note>,)
而scalar()返回单个元素(Row对象/元组的第一个元素):
<Note>
如果你想用one()得到一个元素,你可以用scalars()调用它:
scalars()
>>> session.execute(select(Note)).scalars().one()
或者使用scalar_one()快捷方式:
scalar_one()
>>> session.execute(select(Note)).scalar_one()
有关详细信息,请参阅2.0迁移文档:https://docs.sqlalchemy.org/en/14/changelog/migration_20.html#migration-orm-usage
3条答案
按热度按时间w46czmvw1#
SQLAlchemy有很好的文档。
one()
只返回一个结果或引发异常。
如果查询未选择任何行,则引发sqlalchemy.orm.exc.NoResultFound。如果返回多个对象标识,或者对于仅返回标量值而不是完整标识Map实体的查询返回多行,则引发sqlalchemy.orm.exc. MultipleResultFound。
在一个()方法上链接
scalar()
返回第一个结果的第一个元素;如果不存在行,则返回None。如果返回多行,则引发MultipleResultsFound。
标量()方法上的链接。
如果您有一些与SQLAlchemy相关的问题,我的建议是-首先,查看文档,因为它确实非常强大而且干净。
ct3nt3jp2#
以下是两者的区别以及使用时机:
何时使用
one()
:如果您有一个查询应该返回1个结果,否则将引发异常-即使它返回0个结果。* 换句话说,它不允许
empty results
。*何时使用scalar():
如果查询返回1个结果或没有结果。否则抛出异常。* 换句话说,它不允许
empty results
。*6rvt4ljy3#
在SQLAlchemy 2.0样式中,结果格式也不同。
one()
返回Row
对象(命名元组):而
scalar()
返回单个元素(Row对象/元组的第一个元素):如果你想用
one()
得到一个元素,你可以用scalars()
调用它:或者使用
scalar_one()
快捷方式:有关详细信息,请参阅2.0迁移文档:https://docs.sqlalchemy.org/en/14/changelog/migration_20.html#migration-orm-usage