首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以在不显式定义每个变量的情况下将数据从表单中插入到数据库中?

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

Stack Overflow用户
提问于 2019-06-20 07:37:46
回答 1查看 97关注 0票数 2

我在金银炼金术和变形的帮助下做了一个很长的形状。

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

代码语言:javascript
复制
#my schema 

class All(colander.MappingSchema):
                setup_schema(None,atr)
                atrschema =atr.__colanderalchemy__
                setup_schema(None,chemicals)
                chemicalsschema =chemicals.__colanderalchemy__
                setup_schema(None,data_aquisition)
                data_aquisitionschema =data_aquisition.__colanderalchemy__
                setup_schema(None,depositor)
                depositorschema =depositor.__colanderalchemy__
                setup_schema(None,dried_film)
                dried_filmschema =dried_film.__colanderalchemy__

form = All()
form = deform.Form(form,buttons=('submit',))

# this is how I get it to work by redefining each field but there must be a better way

if 'submit' in request.POST:

   prism_material = request.params['prism_material']
   angle_of_incidence_degrees = 
   request.params['angle_of_incidence_degrees']
   number_of_reflections = request.params['number_of_reflections']
   prism_size_mm = request.params['prism_size_mm']
   spectrometer_ID = 6

   page = atr (spectrometer_ID=spectrometer_ID,prism_size_mm=prism_size_mm,number_of_reflections=number_of_reflections,angle_of_incidence_degrees=angle_of_incidence_degrees,prism_material=prism_material)

   request.dbsession.add(page)




Would like to somehow just be able to remap all of that 'multi dictionary' that is returned back to the database?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-20 21:23:52

那么,您有一个dict (request.params),并希望将键值部分从该dict传递给函数吗?Python有一种使用**kwargs syntax实现这一功能的方法。

代码语言:javascript
复制
if 'submit' in request.POST:
   page = Page(spectrometer_ID=6,**request.params)   
   request.dbsession.add(page)

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56681208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档