我的应用程序是通过ajax(onblur)将一个表单元素的微小信息提交给控制器my_function
。
request.vars 是<Storage {'my_field': 'the submitted data'}>
。
我了解如果db.table(id).update_record(the_field = 'text')
是表格中的字段,则可以使用the_field
更新记录。
但我尝试将field_name和数据传递给update_record()
函数:
def my_function():
keys = request.vars.keys()
field_name = keys[0] # -> The field name to be updated
content_id = int(request.args(0)) # -> The record id to be updated
db.my_table(content_id).update_record(field_name = request.vars[field_name])
哪个无效:SyntaxError: No fields to update
。如果我对field_name
进行硬编码, 就会正常工作。有什么我想念的吗?
答案 0 :(得分:1)
您可以使用Python的关键字参数解包语法(即将参数作为字典传递,将解压缩为关键字参数及其值):
db.my_table(content_id).update_record(**{field_name: request.vars[field_name]})
实际上,该表有一个_filter_fields
方法,它接受类似字典的对象并将其过滤到仅属于表中的字段(id
字段除外)。因此,如果有可能要更新多个字段,您可以执行以下操作:
db.my_table(content_id).update_record(**db.my_table._filter_fields(request.vars))
答案 1 :(得分:0)
我遇到过类似的问题,任何时候我需要将一个数组元素放入一个SQL语句中,只有在我首先将它转换为字符串时它才会起作用。
field_name = str(key[0])