Sye*_*een 7 python sqlalchemy flask-sqlalchemy
SQLAlchemy.one()和.scalar()SQLAlchemy之间的主要区别是什么,因为两者都做相同的工作。
我看到了一些像tutorialpoint.com这样的网站,但这种解释不足以让我清楚地理解
小智 39
以下是它们的区别以及何时使用它们:
\n何时使用one():
\n如果您的查询应返回 1 个结果,否则即使返回 0 个结果,也会引发异常 \xe2\x80\x93。换句话说,它不允许 empty results。
何时使用 scalar():
\n如果您的查询返回 1 个结果或不返回任何结果。否则抛出异常。换句话说,它确实允许 empty results.
小智 21
SQLAlchemy 有很好的文档。
one()
只返回一个结果或引发异常。
如果查询未选择任何行,则引发 sqlalchemy.orm.exc.NoResultFound。如果返回多个对象标识,或者如果为仅返回标量值而不是完整标识映射实体的查询返回多行,则引发 sqlalchemy.orm.exc.MultipleResultsFound。
one()方法上的链接
scalar()
如果不存在行,则返回第一个结果的第一个元素或 None 。如果返回多行,则引发 MultipleResultsFound。
Scalar()方法上的链接。
如果你有一些与SQLAlchemy相关的问题,我的建议 - 首先,检查文档,因为它非常强大和干净。
Gre*_* Li 11
在SQLAlchemy 2.0风格中,结果格式也不同。
one()返回Row对象(命名元组):
>>> session.execute(select(Note)).one()
(<Note>,)
Run Code Online (Sandbox Code Playgroud)
whilescalar()返回单个元素(Row 对象/元组的第一个元素):
<Note>
Run Code Online (Sandbox Code Playgroud)
如果你想用 获取单个元素one(),你可以用 调用它scalars():
>>> session.execute(select(Note)).scalars().one()
Run Code Online (Sandbox Code Playgroud)
或者使用scalar_one()快捷方式:
>>> session.execute(select(Note)).scalar_one()
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅 2.0 迁移文档:https://docs.sqlalchemy.org/en/14/changelog/migration_20.html#migration-orm-usage
| 归档时间: |
|
| 查看次数: |
13152 次 |
| 最近记录: |