gpt4 book ai didi

python - 将 SQLAlchemy ORM 与来自 sql 核心表达式的对象连接起来?

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:04 25 4
gpt4 key购买 nike

我必须使用 SQLalchemy Core 表达式来获取对象,因为 ORM 不能进行“更新和返回”。 (ORM 中的更新没有返回)

from sqlalchemy import update
class User(ORMBase):
...
# pure sql expression, the object returned is not ORM object.
# the object is a RowProxy.
object = update(User) \
.values({'name': 'Wayne'}) \
.where(User.id == subquery.as_scalar()) \
.returning() \
.fetchone()

什么时候

db_session.add(object)

它报告 UnmappedInstanceError: Class 'sqlalchemy.engine.result.RowProxy' is not mapped

如何将 SQL 表达式中的 RowProxy 对象放入 ORM 的标识映射中?

最佳答案

我不确定是否有直接的方法来执行您所描述的操作,这实际上是构建一个直接映射到数据库条目但不通过 ORM 执行查询的 ORM 对象。

我的直觉是,天真的方法(只需使用数据库中的值构建 ORM 对象)只会创建具有相同值的另一行(或由于唯一性约束而失败)。

更标准的方法是通过 ORM 首先查询行,然后从该 ORM 对象更新数据库。

user = User.query.filter(User.user_attribute == 'foo').one()
user.some_value = 'bar'
session.add(user)
session.commit()

不过,我不确定您是否有某些限制阻止您使用该模式。该文档通过类似的方式工作 examples

关于python - 将 SQLAlchemy ORM 与来自 sql 核心表达式的对象连接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41517779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com