【问题标题】:How to add multiple entries to Mongodb document at once using MongoEngine in Flask?如何在 Flask 中使用 MongoEngine 一次向 Mongodb 文档添加多个条目?
【发布时间】:2014-06-11 00:42:20
【问题描述】:

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

我尝试遍历包含我的条目的字典。我稍微简化了示例,但最初数据是我的 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'])

但正如您所见,我无法重新创建所需的列表。

如何正确做?

【问题讨论】:

  • stackoverflow.com/questions/15143482/… 可能重复 - 我会检查那里的解决方案是否适用。
  • 我会说它不是重复的。另一个问题不包含任何可迭代的项目,我无法通过提供的答案来解决它。

标签: python mongodb flask mongoengine flask-mongoengine


【解决方案1】:
# 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)

【讨论】:

  • 谢谢,我认为这是我的想法和提供的链接之间缺少的链接。
【解决方案2】:

快速简便的方法:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2014-09-23
    • 2013-02-15
    • 1970-01-01
    • 2015-04-24
    相关资源
    最近更新 更多