如何将通用关键字参数和值传递给 web2py 中的 update_record() 函数

How to pass generic keyword arguments and values to the update_record() function in web2py

我的应用程序正在通过 ajax (onblur) 从表单元素向控制器提交少量信息 my_function

request.vars<Storage {'my_field': 'the submitted data'}>.

我知道如果 the_field 是 table 中的一个字段,则可以使用 db.table(id).update_record(the_field = 'text') 更新记录。

但我尝试将 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,它 工作。有什么我想念的吗?

我 运行 遇到了类似的问题,任何时候我需要将数组元素放入 SQL 语句中时,只有先将其转换为字符串才有效。

field_name = str(key[0])

您可以使用 Python 的关键字参数解包语法(即,将参数作为字典传递,它将被解包为关键字参数及其值):

db.my_table(content_id).update_record(**{field_name: request.vars[field_name]})

实际上,table 有一个 _filter_fields 方法,该方法采用类似字典的对象并将其过滤到仅属于 table 的字段(不包括 id 字段)。所以,如果可能有多个字段要更新,你可以这样做:

db.my_table(content_id).update_record(**db.my_table._filter_fields(request.vars))