【问题标题】:Insert data by pymongo using mongoengine ORM in pyramid在金字塔中使用 mongoengine ORM 通过 pymongo 插入数据
【发布时间】:2013-02-26 08:41:33
【问题描述】:

我想使用 pymongo 连接和方法来使用 mongodb,但同时我想使用 mongoengine ORM。

示例:

class User(Document):
    email = StringField(required=True)
    first_name = StringField(max_length=50)
    last_name = StringField(max_length=50)

john = User(email='jonhd@example.com')
john.first_name = 'Jonh'
john.last_name = 'Hope'

现在我想将新形成的文档用户插入到我的“test_collection”中。 如果只使用 mongoengine 我可以这样做:

connect('test_database')
john.save()

然后我可以轻松访问我的数据:

for user in User.objects:
    print user.first_name 

但是当我尝试使用 pymongo 做同样的事情时,我遇到了一个错误:

connection = MongoClient('localhost', 27017)
db = connection.test_database
collection = db.test_collection
collection.insert(john)

追溯:

Traceback (most recent call last):
File "C:/Users/haribo/PycharmProjects/test/mongoeng.py", line 18, in <module>
    collection.insert(john)
File "C:\Python27\lib\site-packages\pymongo\collection.py", line 353, in insert
    docs = [self.__database._fix_incoming(doc, self) for doc in docs]
File "C:\Python27\lib\site-packages\pymongo\database.py", line 258, in _fix_incoming
    son = manipulator.transform_incoming(son, collection)
File "C:\Python27\lib\site-packages\pymongo\son_manipulator.py", line 73, in transform_incoming
    son["_id"] = ObjectId()
TypeError: 'str' object does not support item assignment

但这有效:

connection = MongoClient('localhost', 27017)
db = connection.test_database
collection = db.test_collection
john = { 'email': 'jonhd@example.com', 'first_name': 'Jonh', 'last_name': 'Hope' }
collections.insert(john)    

并使用 pymongo 访问数据:

print collection.find_one()

{u'last_name': u'Hope', u'first_name': u'Jonh', u'_id': ObjectId('513d93a3ee1dc61390373640'), u'email': u'jonhd@example.com'}

所以,我的主要想法和问题是:

我如何使用 mongoengine 进行 ORM 和 pymongo 连接以及使用 mongodb 的方法?

附:我提到我想在某些情况下在金字塔中使用它。

【问题讨论】:

    标签: python json mongodb pymongo mongoengine


    【解决方案1】:

    Pymongo 获取 python 字典(或类似对象的字典)并将它们持久化到 mongoDB。 Pymongo 不能获取 MongoEngine 类实例并持久化它们。

    MongoEngine 是一个 orm 包装器,它在下面使用 pymongo,并在 Class 实例上有一个方法来保存,例如:john.save() MongoEngine 代码内部发生的事情是将john 实例中的数据转换为一个字典,该字典可以通过 pymongo 存储在 MongoDB 中。

    【讨论】:

    • 这意味着我不能在我的项目中像 ORM 一样使用 pymongo?
    • 哦,我在评论中问错了问题。对不起。我明白。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多