如何将通用关键字参数和值传递给 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))
我的应用程序正在通过 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))