Python 有没有一种方法可以在不显式定义每个变量的情况下将数据从表单映射到数据库?

Python 有没有一种方法可以在不显式定义每个变量的情况下将数据从表单映射到数据库?,python,database,sqlalchemy,pyramid,deform,Python,Database,Sqlalchemy,Pyramid,Deform,借助于漏勺炼金术和变形术,我制作了一个非常长的形状 这个表单有100个左右的字段,目前我所知道的在表单提交后将数据添加回数据库的唯一方法是显式地重新定义每个变量,然后将其添加到数据库中,但必须有更好的方法 #我的模式 类All(colander.MappingSchema): 设置\u架构(无,atr) atrschema=atr.\uu colanderalchemy__ 设置\u架构(无,化学品) 化学炼金术=化学制品__ 设置模式(无,数据采集) 数据采集模式=数据采集__ 设置\u架构

借助于漏勺炼金术和变形术,我制作了一个非常长的形状

这个表单有100个左右的字段,目前我所知道的在表单提交后将数据添加回数据库的唯一方法是显式地重新定义每个变量,然后将其添加到数据库中,但必须有更好的方法


#我的模式
类All(colander.MappingSchema):
设置\u架构(无,atr)
atrschema=atr.\uu colanderalchemy__
设置\u架构(无,化学品)
化学炼金术=化学制品__
设置模式(无,数据采集)
数据采集模式=数据采集__
设置\u架构(无,存款人)
存款人方案=存款人__
设置模式(无,干膜)
干膜模式=干膜__
form=All()
form=deform.form(表单,按钮=('submit',))
#这就是我通过重新定义每个字段来实现它的方法,但必须有更好的方法
如果在request.POST中“提交”:
prism_material=request.params['prism_material']
入射角的角度=
请求.参数['入射角_度']
反射次数=请求.参数['反射次数']
prism_size_mm=请求.参数['prism_size_mm']
光谱仪ID=6
page=atr(光谱仪ID=光谱仪ID,棱镜尺寸mm=棱镜尺寸mm,反射次数=反射次数,入射角度度=入射角度度,棱镜材料=棱镜材料)
request.dbsession.add(第页)
是否希望能够重新映射所有返回到数据库的“多字典”?
那么,您有一个dict(
request.params
)并希望将键值pars从该dict传递给函数?Python有一种方法可以使用
**kwargs

(这也是因为SQLAlchemy提供了一个默认构造函数,将传递的值分配给映射列,而无需手动定义)


当然,这是一种幼稚的方法,只适用于最简单的用例——例如,它可能允许传递模式中未定义的参数,这可能会造成安全问题;模式中的字段名必须与SQLAlchemy模型中的字段名匹配;它可能不适用于列表(即,可以通过request.params.get_all(name)访问的具有相同名称的多个值)。

您可以使用一个键数组,对其进行迭代,并从迭代中创建一个dict。
if 'submit' in request.POST:
   page = Page(spectrometer_ID=6,**request.params)   
   request.dbsession.add(page)