python one()和.scalar()之间的区别是什么

mxg2im7a  于 2023-02-18  发布在  Python
关注(0)|答案(3)|浏览(189)

在SQLAlchemy中,.one().scalar()的主要区别是什么,因为它们都做同样的工作。
我看到一些网站,如tutorialpoint.com,但解释不足以让我明白

w46czmvw

w46czmvw1#

SQLAlchemy有很好的文档。
one()
只返回一个结果或引发异常。
如果查询未选择任何行,则引发sqlalchemy.orm.exc.NoResultFound。如果返回多个对象标识,或者对于仅返回标量值而不是完整标识Map实体的查询返回多行,则引发sqlalchemy.orm.exc. MultipleResultFound。
在一个()方法上链接
scalar()
返回第一个结果的第一个元素;如果不存在行,则返回None。如果返回多行,则引发MultipleResultsFound。
标量()方法上的链接。
如果您有一些与SQLAlchemy相关的问题,我的建议是-首先,查看文档,因为它确实非常强大而且干净。

ct3nt3jp

ct3nt3jp2#

以下是两者的区别以及使用时机:

何时使用one()

如果您有一个查询应该返回1个结果,否则将引发异常-即使它返回0个结果。* 换句话说,它不允许empty results。*

何时使用scalar():

如果查询返回1个结果或没有结果。否则抛出异常。* 换句话说,它不允许empty results。*

6rvt4ljy

6rvt4ljy3#

在SQLAlchemy 2.0样式中,结果格式也不同。
one()返回Row对象(命名元组):

>>> session.execute(select(Note)).one()
(<Note>,)

scalar()返回单个元素(Row对象/元组的第一个元素):

<Note>

如果你想用one()得到一个元素,你可以用scalars()调用它:

>>> session.execute(select(Note)).scalars().one()

或者使用scalar_one()快捷方式:

>>> session.execute(select(Note)).scalar_one()

有关详细信息,请参阅2.0迁移文档:https://docs.sqlalchemy.org/en/14/changelog/migration_20.html#migration-orm-usage

相关问题