将具有列表值的字典插入web2py中的数据库

问题描述 投票:0回答:1

你好,我有一个ajax将数据发布到我的控制器,如下所示

<Storage {'transaction_charge': ['1100', '1100'], 'min_amount': ['10000', '20001'], 'max_amount': ['20000', '50000'], 'admin_charge': ['1500', '3000'], 'other_charge': ['30', '60']}>

我可以安全地将其转换为键值是如下列表的字典

{'transaction_charge': ['1100', '1100'], 'min_amount': ['10000', '20001'], 'max_amount': ['20000', '5000'], 'admin_charge': ['1400', '3000'], 'other_charge': ['80', '70']}

我还有一个数据库表,其名称与上述数据集中的键名匹配,我想以每个列表值创建一个新记录的方式将其发布到数据库中在数据库中,例如

id | min_amount | max_amount | admin_charge | transaction_charge | other_charge
1  | 10000      | 20000      | 1500         | 1100               | 30
2  | 20001      | 50000      | 3000         | 1100               | 60

NOTE我的表格字段是动态的,如果用户添加其他费用类型,它们可能会更改,因此我不想显式添加这些记录,web2py是否可以聪明地读取这些键,并将它们的列表值映射到某种循环中的表列,以便在数据库中创建len(ajax_data['key')记录?

谢谢

python-3.x web2py
1个回答
0
投票
嗯,web2py有一种很好的方法来过滤字典,使其仅包含与表的字段匹配的键:_filter_fields

您将要把发布的数据从列表的字典转换为字典的列表,例如:

data = [ { 'transaction_charge': '1100', 'min_amount': '10000', 'max_amount': '20000', 'admin_charge': '1400', 'other_charge': '80', }, { 'transaction_charge': '1100', ... } ]

然后您可以循环,过滤和插入:

for row in data: db.table_name.insert(**db.table_name._filter_fields(row))

© www.soinside.com 2019 - 2024. All rights reserved.