我正在使用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开始)。输入的数量和颜色字段也是如此。我最初的想法是将一个项目列表插入到文档中,而不是单独插入每个项目,但我不确定最好的方法。
答案 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)