在Sqlalchemy中更新多个列

时间:2016-03-04 20:38:30

标签: python python-2.7 sqlalchemy flask-sqlalchemy

我有一个在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 i =给出错误Can't assign to function call。如果column2 / 3不是函数,则它们是字段名称。那么,如何更新多个值以及为什么它在这里给出错误?

PS:我提到了sqlalchemy doc

3 个答案:

答案 0 :(得分:2)

可以使用Session更新多个列:

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

答案 1 :(得分:1)

您可以编写更多通用函数,它将接受您的表对象,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

答案 2 :(得分:0)

使用您之前的结构:

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