2016-12-13 3 views
1

MongoDB 연결 처리기를 구현하려고하는데 내 MongoClient() 호출이 있더라도 Database 호출이 None을 반환하는 문제가 발생합니다. 성공한.MongoClient()는 성공적이지만 데이터베이스 (MongoClient(), dbName)는 NoneType을 반환합니다.

#mongoconn.py 

from pymongo import MongoClient 
from pymongo.database import Database 

class MongoConnection(): 
    mongoconn = None 

    def __init__(self, db=None, collection=None, endpoint=None): 
     self.mongodb = db 
     self.mongocollection = collection 
     self.mongoendpoint = endpoint 
     mongoconn = self.__mongo_connect() 

    def __mongo_connect(self): 
     if self.mongoendpoint is not None: 
      mc = MongoClient(host=self.mongoendpoint, port=27017, document_class=dict, tz_aware=False, connect=True) 
      print mc #successful object 
      return Database(mc) 
     else: 
      mc = MongoClient(host='localhost', port=27017, document_class=dict, tz_aware=False, connect=True) 
      print mc #successful object 
      return Database(mc, self.mongodb) 

m1 = MongoConnection("torbot") 

print m1.mongoconn # None 

나는이 컬렉션 torbot이 존재하는 것을 볼 수있다, 그래서 나는 그 문제의 믿지 않는다 :

MongoDB shell version v3.4.0 
connecting to: mongodb://127.0.0.1:27017 
MongoDB server version: 3.4.0 
use torbot 
switched to db torbot 
db.requests.find(); 
{ "_id" : ObjectId("584f7e17bc1d1b7f37d54756"), "requestor" : "ctote", "request" : "Scott Pilgrim Vs The World" } 

하지만 볼 수있는 디버그 옵션을 찾을 수없는 이유 Database(mc, self.mongodb)에 대한 호출 실패합니다.

답변

1

__init__ 메서드에서 액세스하기위한 클래스 속성으로 클래스 이름 앞에 self을 접두사로 사용해야합니다. 귀하의 경우에 self.mongoconn을 수행하면 원하는 속성이 아닌 인스턴스 속성이 작성되므로 MongoConnection.mongoconn = self.__mongo_connect()이 필요합니다. 귀하의 __init__ 방법이된다 :

class MongoConnection(): 
    mongoconn = None 

    def __init__(self, db=None, collection=None, endpoint=None): 
     self.mongodb = db 
     self.mongocollection = collection 
     self.mongoendpoint = endpoint 
     MongoConnection.mongoconn = self.__mongo_connect() 

무슨 일을하는 것은 당신이 당신의 마지막 코멘트에 자세히 설명 할 수는

+0

불구하고 일을해야 뭔가가 있다면 나도 몰라? '당신이하고있는 일이 당신이해야만하는 일인지 알지 못한다. ' – MrDuk

+0

@MrDuk 일반적으로 애플리케이션에서'Database' 인스턴스를 조작하고 싶지는 않습니다. 필요한 모든 것이 * 연결 핸들러 * 인 경우 함수를 사용하는 것이 더 효율적입니다. – styvane