python - 有没有一种方法可以将数据从表单映射到插入数据库而无需显式定义每个变量?

标签 python database sqlalchemy pyramid deform

我在漏勺炼金术和变形的帮助下制作了一个非常长的表格。

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


#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?

最佳答案

那么,您有一个字典(request.params)并希望将键值解析从该字典传递给函数? Python 有一种方法可以使用 **kwargs 来做到这一点 syntax :

if 'submit' in request.POST:
   page = Page(spectrometer_ID=6,**request.params)   
   request.dbsession.add(page)

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

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

关于python - 有没有一种方法可以将数据从表单映射到插入数据库而无需显式定义每个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56681208/

相关文章:

Python/金字塔 + SQLAlchemy > MySQL : How do I check connection before usage?

python - Numpy 中的矩阵索引

python - 删除并替换在 Python 中打印到终端的最后一个字符

python - ZMQ 延迟与 PUB-SUB(慢订阅者)

python - 比较 numpy 数组时出现 Numba autojit 错误

mongodb - 我怎么知道我的服务器是否运行 mongodb 64 位?

c# - 数据库中的值在文本框中不可见,请将值插入到正确的用户名中

database - 如何打破循环依赖?

python - SQLAlchemy:修改查询对象的 from 子句

python - 在 sqlalchemy 中跨不同模块访问相同的 db.session