开发者社区> 问答> 正文

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

您好我有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

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

谢谢 问题来源: stackoverflow

展开
收起
is大龙 2020-03-20 20:33:13 501 0
1 条回答
写回答
取消 提交回答
  • 好吧,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))
    

    回答来源: stackoverflow

    2020-03-20 20:34:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载