Web.py db.update() - 将字典作为参数传递给AND作为值列表

时间:2013-12-02 17:13:07

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

我有一个Dict包含我要在db中更新的一些数据,我的dict就像:

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'

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

web.py文档引用了db.select()指令,但对我来说根本不清楚..

感谢您的帮助!

费德里科

1 个答案:

答案 0 :(得分: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将在哪里使用。所有其他命名的参数,除了,vars,_test将在集合