使用Sqlalchemy更新多列

4
我有一个运行在Flask上并使用SQLAlchemy与数据库交互的应用程序。我想要使用用户指定的值更新表格的列。我正在使用的查询是:
def update_table(value1, value2, value3):
     query = update(Table).where(Table.column1 == value1).values(Table.column2 = value2, Table.column3 = value3)

我不确定我传递值的方式是否正确。同时,Table.column2/3会出现错误,显示无法分配给函数调用。其中column2/3不是函数,而是字段名称。那么,我该如何更新多个值,为什么这里会出错?
PS:我参考了SQLAlchemy的文档

请发布实际的堆栈跟踪。您遇到的错误意味着您在某个地方执行了 foo() = ...,但是您的代码并没有实际显示。按照当前的方式,您的代码应该会给出一个 SyntaxError: 关键字不能是表达式 的错误。 - univerio
3个回答

10

可以使用会话(Session)来更新多列,如下:

def update_table(session, val1, val2, val3):
  session.query(Table).filter_by(col=val1).update(dict(col2=val2,col3=val3))
  session.commit()

4
你可以编写更通用的函数,它将接受您的表对象、WHERE条件和实际更新值。例如:
def get_update_query(table_name, where_vals, update_vals):
  query = table_name.update()
  for k, v in where_vals.iteritems():
    query = query.where(getattr(table_name.c, k) == v)
  return query.values(**update_vals)

table = YourTable
where_vals = {'col1': 'foo', 'col2': 'bar'}
update_vals = {'col1': 'foo_updated', 'col2': 'bar_updated'}
res = get_update_query(YourTable, where_vals, update_vals)

# UPDATE "YourTable" SET col1=:col1, col2=:col2 WHERE "YourTable".col1 = :col1_1 AND "YourTable".col2 = :col2_1

0

使用您之前的结构:

def update_table(value1, value2, value3):
     query = update(Table).where(Table.column1 == value1).values( { Table.column2 : value2, Table.column3 : value3 } )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接