2015-07-22 3 views
1

Я создаю сайт, используя Django и MongoDB. Существует 2 популярных API-интерфейса, которые мы можем использовать для подключения Django и MongoDB, один - mongoengine, а другой - django-mongodb-engine.Использование pymongo в django напрямую

Поскольку последняя mongoengine не поддерживается Django больше Document и django-mongodb-engine нужен другой django-nonrel пакет, который делает среду разработки немного усложнять.

Мне интересно, если бы я мог использовать Pymongo для подключения Django и MongoDB напрямую.

Есть ли у кого тот же опыт, который мог бы поделиться? и как установить db в setting.py в Django, чтобы сделать db общедоступным?

+0

Mongoengine 0.9 может быть вариантом с Django (учитывая, что у вас нет зависимости от какой-либо функции/улучшения в выпуске 0.10). Прочитайте [docs] (http://docs.mongoengine.org/en/latest/apireference.html) для подключения к mongodb. –

ответ

2

В настоящее время я работаю над очень похожими проблемами.

Вы правы, mongoengine не поддерживает Django, но, насколько мне известно, pymongo не поддерживает его. По крайней мере, mongoengine имеет планы поддержать его когда-нибудь. Если вы знакомы с Django, у него есть похожие на модель вещи - документы. С ними легко работать - на самом деле это полная работа ORM. Вы не получите этого с pymongo, и если вы собираетесь построить большое приложение многократного использования, вы в конечном итоге напишите ORM самостоятельно или получите код спагетти. Вот почему я использовал mongoengine.

В вашей settings.py вы должны включить этот код:

from mongoengine import connect 
connect('your_database') 

Если вы все еще хотите использовать pymongo по какой-то причине, ваш код должен выглядеть следующим образом:

from pymongo import MongoClient 
client = MongoClient() 
+0

Спасибо. Если я использую решение pymongo, будет ли 'client' глобальной переменной в Django? –

+0

это полностью зависит от вас, чтобы решить - я предполагаю, что вы собираетесь использовать его для некоторых предметов низкого уровня, и это зависит от того, что вам нужно –

4

вы можете использовать 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)