直接在django中使用pymongo

时间:2015-07-22 02:34:42

标签: django mongodb pymongo mongoengine django-mongodb-engine

我正在使用Django和MongoDB构建一个网站。我们可以使用两个流行的API框架来连接DjangoMongoDB,其中一个是mongoengine,另一个是django-mongodb-engine

因为不支持最新的mongoengine Django Document,而django-mongodb-engine需要另一个django-nonrel包,这会使开发环境变得有点复杂。

我想知道,如果我可以使用Pymongo直接连接DjangoMongoDB

有没有人可以分享相同的经验?以及如何在Django的setting.py中设置数据库以使数据库公开?

2 个答案:

答案 0 :(得分:5)

您可以使用pyMongo,如下面的代码

from pymongo import MongoClient


class MongoConnection(object):

    def __init__(self):
        client = MongoClient('localhost', 27017)
        self.db = client['database_name']

    def get_collection(self, name):
        self.collection = self.db[name]

我们根据需要创建连接。

class MyCollection(MongoConnection):

    def __init__(self):
       super(MyCollection, self).__init__()
       self.get_collection('collection_name')

    def update_and_save(self, obj):
       if self.collection.find({'id': obj.id}).count():
           self.collection.update({ "id": obj.id},{'id':123,'name':'test'})
       else:
           self.collection.insert_one({'id':123,'name':'test'})

    def remove(self, obj):
        if self.collection.find({'id': obj.id}).count():
           self.collection.delete_one({ "id": obj.id})

现在你只需要打电话如下。

my_col_obj = MyCollection()
obj = Mymodel.objects.first()
my_col_obj.update_and_save(obj)
my_col_obj.remove(obj)

答案 1 :(得分:2)

我目前正在处理一个非常类似的问题。

你是对的,mongoengine不支持Django,但据我所知,pymongo也不支持Django。至少mongoengine计划有一天支持它。如果您熟悉Django,它就有类似模型的东西 - 文档。它们易于使用 - 这实际上是一个完整的ORM。你没有得到pymongo,如果你打算建立一个大的,可重复使用的应用程序,你最终会自己编写ORM或者有意大利面条代码。这就是我使用mongoengine的原因。

settings.py中,您应该包含以下代码:

from mongoengine import connect
connect('your_database')

如果由于某种原因仍想使用pymongo,则代码应如下所示:

from pymongo import MongoClient
client = MongoClient()