如何更新SQLAlchemy RowProxy?

如何更新SQLAlchemy RowProxy?,sqlalchemy,Sqlalchemy,我正在使用SQLAlchemy表达式语言(而不是ORM),并试图找出如何更新查询结果 我发现RowProxy对象不支持赋值,而是抛出一个AttributeError: # Get a row from the table row = engine.execute(mytable.select().limit(1)).fetchone() # Check that `foo` exists on the row assert row.foo is None # Try to update `f

我正在使用SQLAlchemy表达式语言(而不是ORM),并试图找出如何更新查询结果

我发现RowProxy对象不支持赋值,而是抛出一个
AttributeError

# Get a row from the table
row = engine.execute(mytable.select().limit(1)).fetchone()

# Check that `foo` exists on the row
assert row.foo is None

# Try to update `foo`
row.foo = "bar"

AttributeError: 'RowProxy' object has no attribute 'foo'
我发现,它使用ORM,但我特别希望使用表达式语言

我还发现,它将行转换为dict并更新dict,但这似乎是一个很难解决的问题

所以我有几个问题:

  • 这真的是唯一的方法吗
  • 此外,这是推荐的方法吗
  • 最后,由于缺少文档,我不禁要问:我这么做是不是误用了SQLAlchemy

您误用了SQLAlchemy。您描述的用法是使用ORM的好处。如果您只想将自己限制在SQLAlchemy核心,那么您需要这样做

engine.execute(mytable.update().where(mytable.c.id == <id>).values(foo="bar"))
engine.execute(mytable.update().where(mytable.c.id==).value(foo=“bar”))

通过更新
RowProxy
您试图实现什么?我想从数据库中获取一行,然后我有一些python逻辑来选择如何更新它。然后我只想更新我获取的行。那么你误用了SQLAlchemy。您描述的用法是使用ORM的好处。如果您只想限制自己使用SQLAlchemy Core,那么您需要执行
mytable.update().values(foo=bar)
。好的,谢谢。如果你把它作为一个答案,我会接受的。一个问题-是否可以使用声明性映射->?