2017-03-16 4 views
0

私はPythonでmongo接続を作成し、いくつかの操作を実行するクラスベースのラッパーを探しています。私はいくつかのコードを書くことに始めましたが、既存のラッパーが同様のニーズに対応できるかどうかを考えました。私はあなたのコードが提供するメリットを理解していないクラスベースのラッパーfor Python Mongo

答えて

0

上記のよう

class MongoDbConn: 

    def __init__(self): 
     self.settings_mongo = { 
      'username': DB_USERID_MONGO, 
      'password': DB_PASSWORD_MONGO, 
      'host': DB_HOST_MONGO + ":" + DB_PORT_MONGO, 
      'database': DB_AUTH_NM_MONGO 
     } 
     self.mongo_client =\ 
      MongoClient("mongodb://{username}:{password}@" 
         "{host}/?authSource={database}".format(
          **self.settings_mongo)) 

    def execute_operation(self, db_name, collection_name, query, 
          operation): 
     assert operation in ["find", "find_one", "distinct"] 
     db = self.mongo_client[db_name] 
     collection = db[collection_name] 
     rs = getattr(collection, operation)(query) 
     return rs 

    def find_one(self, db_name, collection_name, query): 
     return self.execute_operation(self, db_name, collection_name, query, 
             operation="find_one") 

    def find(self, db_name, collection_name, query): 
     TODO 

    def delete(self, db_name, collection_name, query): 
     TODO 

    def ensure_index_if_not_exist(self, db_name, collection_name, query): 
     TODO 

    def distinct(self, db_name, collection_name, query): 
     TODO 

    def insert(self, db_name, collection_name, query): 
     TODO 

    def update(self, db_name, collection_name, query): 
     TODO 

したがって、上記の例のように、私は同じ性質の利用できる汎用的なライブラリーを探しています。 PyMongoを直接使うよりも複雑で、多分少し遅いかもしれませんが、それ以外のところは私にはあまり効果がありません。ちょうどPyMongoを使用してください。

MongoDBとのより高いレベルのPythonインターフェイスをお探しの場合は、PythonオブジェクトとMongoDBドキュメントの間で変換するPyMODMを検討してください。Django ORMはSQL行の場合と少し似ています。

+0

ありがとう@A。 Jesse、私はORMに全く興味がありません。 mongoでCRUD操作ができるはずのジェネリック関数が必要です。コードが遅くなる理由を教えてください。私はそれを改善することができます。 MongoClientを使ってはいけないと言いたいのですか?私は、MongoClientをリンクをたどることからインスピレーションを受けました。http://stackoverflow.com/questions/13959790/pymongo-mongoclient-or-connection – sudhanshu

+0

MongoDbConnを直接作成せず、MongoClientを作成してすべての操作に使用してください。そうすると関数呼び出しが少なくて済むでしょう。もし 'find'をしたいのであれば、MongoClientの' find'関数を呼び出すのではなく、MongoClientの 'find'関数を直接呼び出します。また、より簡単になります。 MongoClientの関数を呼び出す別のクラスにMongoClientをラップする必要はありません。 –

+0

確かに、私はグローバルレベルでmongoクライアントを持つことができます。スタートアップのように、findなどの関数を書くために使うことができます。 – sudhanshu

関連する問題