【问题标题】:Web.py db.update() - passing a dictionary as argument of where AND as values listWeb.py db.update() - 将字典作为 where 和值列表的参数传递
【发布时间】:2013-12-02 17:13:06
【问题描述】:

我有一个包含一些我想在数据库中更新的数据的字典,我的字典是这样的:

user[column_name] = value
>>> user
{'id': 2, 'name': 'Carlo', city='333'}

并且具有可变数量的键(取决于用户填写的字段数),并且该表包含的列比我要更新的值多。

我想要做的是:

>>> db.update('users', where="id=$id", **user)
0.0 (19): UPDATE users SET id = 2, name = 'Carlo', city='333' WHERE id=<built-in function id>
0L

但是更新查询是错误的,我想得到的是这样的:

UPDATE users SET name='Carlo', city='333' WHERE id='2'

有没有一种方法可以在 db.update() 函数中使用键/值作为 WHERE 子句并使用其他键/值对作为 SET 参数来传递字典?

web.py 文档参考了 db.select() 说明,但我根本不清楚..

感谢您的帮助!

费德里科

【问题讨论】:

    标签: python database dictionary sql-update web.py


    【解决方案1】:

    因为 id 是一个内置函数,所以你必须在 vars 中定义它:

    db.update('users', where="id=$id", vars={'id': user['id']}, **user)
    

    如果你真的不希望 id=2 存在于更新集中,那么你可以这样做:

    uid = user.pop('id')
    db.update('users', where="id=$id", vars={'id': uid}, **user)
    

    但如果您在用户中仍然需要它,请记住将其设置回来

    或者像这样列出你想要的所有东西:

    db.update('users', where="id=$id", vars={'id': uid}, name=user['name'], city=user['city'])
    

    所以vars会用在where中。所有其他命名参数,除了 where、vars、_test 将在集合中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-22
      • 2011-03-04
      • 2021-09-26
      • 2021-09-27
      • 2019-11-18
      • 2021-12-14
      • 1970-01-01
      • 2022-11-11
      相关资源
      最近更新 更多