如何更新SQLAlchemy RowProxy?

时间:2017-05-01 17:55:20

标签: 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 `foo`
row.foo = "bar"

AttributeError: 'RowProxy' object has no attribute 'foo'

我找到了this solution,它使用了ORM,但我特别希望使用表达式语言。

我还找到this solution,它将行转换为dict并更新dict,但这似乎是一个hacky变通方法。

所以我有几个问题:

  • 这实际上是唯一的方法吗?
  • 此外,这是推荐的方式吗?
  • 最后,缺乏文档让我感到疑惑:我是不是试图通过尝试这样做来滥用SQLAlchemy?

1 个答案:

答案 0 :(得分:2)

您滥用SQLAlchemy。您所描述的用法是使用ORM的好处。如果您只想限制自己使用SQLAlchemy Core,那么您需要执行

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