MongoDB数据发布

时间:2013-07-22 19:01:54

标签: python mongodb pymongo bottle

我正在使用MongoDB,pymongo和Bottle创建一个管理发票数据的Web应用程序。目前在创建用于处理数据库的插入和读取的类中,我编写了一个函数来读取给定文档的每个元素,另一个函数根据从html表单给出的输入插入新文档。

#This function will handle the finding of orders
    def find_names(self):
        l = []
        for each_name in self.myorders.find():
            l.append({'_id':each_name['_id'], 'quote':each_name['quote'],'name': each_name['name'], 'item': each_name['item'], 'qty': each_name['qty'], 'color': each_name['color'], 'phone': each_name['phone'], 'email':each_name['email']})
        return l

#This function will handle the insertion of orders
    def insert_name(self, newname, newitem, newqty, newcolor, newphone, newemail, newquote):
        creationTime = datetime.datetime.now()
        newname = {'name':newname, 'created' :creationTime, 'item' :newitem, 'qty':newqty, 'color':newcolor, 'phone':newphone, 'email' :newemail, 'quote' :newquote}
        _id = self.myorders.insert(newname)
        return _id

但是,html页面不仅可以接受一个项目,数量和颜色,还可以考虑包含多个项目的订单。我想知道最佳做法是更新我的函数以包含可变数量的参数,而无需提前知道用户将输入多少参数。每个附加项目都标记为项目#,其中“#”替换为订单插入的数字项,因此例如插入第6项的项目5(从0开始)。输入的数量和颜色字段也是如此。我最初的想法是将一个项目列表插入到文档中,而不是单独插入每个项目,但我不确定最好的方法。

1 个答案:

答案 0 :(得分:1)

只需列出一份清单:

def insert_names(self, names):
    # `names` is a list of dicts

    inserted_ids = []

    for name in names:
        name['created'] = datetime.datetime.now()
        _id = self.myorders.insert(name)
        inserted_ids.append(_id)

    return inserted_ids

使用您从html表单生成的列表调用insert_names。

names = [
    {'name': name0, 'qty': qty0, ...}
    {'name': name1, 'qty': qty1, ...}
    {'name': name2, 'qty': qty2, ...}
    ...
]
insert_names(names)