我有一个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()指令,但对我来说根本不清楚..
感谢您的帮助!
费德里科
答案 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将在集合