【问题标题】:Updating multiple columns in Sqlalchemy更新 Sqlalchemy 中的多个列
【发布时间】:2016-06-18 18:02:48
【问题描述】:

我有一个在烧瓶上运行并使用 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

【问题讨论】:

  • 请发布实际的堆栈跟踪。你得到的错误意味着你在某处做foo() = ...,但你的代码实际上并没有显示出来。按照目前的情况,你的代码应该给你一个SyntaxError: keyword can't be an expression

标签: python python-2.7 sqlalchemy flask-sqlalchemy


【解决方案1】:

使用您以前的结构:

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

【讨论】:

    【解决方案2】:

    可以使用 Session 更新多个列:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-12-04
        • 1970-01-01
        • 2017-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-02
        相关资源
        最近更新 更多