如何在Flask中使用MongoEngine一次向Mongodb文档添加多个条目?

时间:2014-04-25 10:40:40

标签: python mongodb flask mongoengine flask-mongoengine

如何使用MongoEngine / Flask-MongoEngine在Flask中一次为文档添加多个条目?

我试图遍历包含我的条目的字典。我简化了一下这个例子,但最初的数据是我的Wordpress吐出的RSS文件,我通过feedparser进行了解析。

但问题显然是我无法在保存到数据库之前动态生成保存条目的变量。

这是我到目前为止所尝试的内容。

如何批量添加条目到我的MongoDB数据库?

# model
class Entry(db.Document):
    created_at = db.DateTimeField(
        default=datetime.datetime.now, required=True),
    title = db.StringField(max_length=255, required=True)
    link = db.StringField(required=True)

# dictionary with entries
e = {'entries': [{'title': u'title1',
                  'link': u'http://www.me.com'
                  },
    {'title': u'title2',
     'link': u'http://www.me.com/link/'
     }
]
}

# multiple entries via views
i = 0
while i<len(e['entries']):
      post[i] = Entry(title=e['entries'][i]['title'], link=e['entries'][i]['title'])
      post[i].save();
      i += 1

编辑1:

我考虑过全部跳过变量并将字典翻译成mongoengine可以理解的形式。

因为当我手动创建列表时,我可以将它们批量输入MongoDB:

newList = [RSSPost(title="test1", link="http://www.google.de"),
            RSSPost(title="test2", link="http://www.test2.com")]

RSSPost.objects.insert(newList)

这有效,但我无法将其完全转化为我的问题。

我试过

f = []

for x in e['entries']:
    f.append("insert " + x['link'] + " and " + x['title'])

但是如你所见,我无法重新创建我需要的列表。

如何正确完成?

2 个答案:

答案 0 :(得分:4)

# dictionary with entries
e = {'entries': [{'title': u'title1',
                  'link': u'http://www.me.com'
                  },
    {'title': u'title2',
     'link': u'http://www.me.com/link/'
     }
]
}

您的数据/案例与您发布的示例有何不同?只要我没有遗漏某些内容,您就应该能够实例化Entry对象,例如:

entries = []
for entry in e['entries']:
    new_entry = Entry(title=entry['title'], link=entry['link'])
    entries.append(new_entry)

Entry.objects.insert(entries)

答案 1 :(得分:2)

快捷方便:

for i in e['entries']:
    new_e = Entry(**i)
    new_e.save()