2016-12-24 62 views
2

我正在做一個Python OOP項目。我必須處理MongoDB交互,但我不想使用ODM,比如mongoenginePython OOP:如何與所有類共享一個MongoDB連接

我想要的是與所有必須與之交互的類共享一個主要的Mongo連接。我認爲使用主DB類可能是一個好主意,我有兩個解決方案。

解在類A級 連接

mydb.py

from pymongo import MongoClient 

class MyMongoDB(object): 

    _client = MongoClient('localhost', 27017) 
    db = _client['name_of_the_db'] 

而在其他類:

from mydb import MyMongoDB 

class Foo(object): 

    _db_collection = MyMongoDB.db.foo_collection 

    def __init__(self): 
     pass 

    def set_data(self, data): 
     Foo._db_collection.insert_one(data) 

解在實例級別甲 連接

mydb.py

from pymongo import MongoClient 

class MyMongoDB(object): 

    def __init__(self): 
     _client = MongoClient('localhost', 27017) 
     db = _client['name_of_the_db'] 

而在其他類:

from mydb import MyMongoDB 

class Foo(object): 

    _db_collection = MyMongoDB().db.foo_collection 

    def __init__(self): 
     pass 

    def set_data(self, data): 
     Foo._db_collection.insert_one(data) 

液A我有一個主要的連接,即使我導入的MongoDB類的很多模塊。

溶液B我有一個新的實例爲每個進口

我認爲液A是這樣的伎倆的正確方法。不是嗎?他們是更好的方法嗎?

回答

5

Python使這個很簡單。有一個模塊級的全局變量:

client = MongoClient() 

如果真是像「my_db.py」模塊中,然後在其他地方,你可以訪問客戶端這樣的:

from my_db import client 

有各種bigotries針對全局變量其他編程語言,但在Python中,它是在整個程序中共享對象的最簡單方法。

+0

哇!所以我不需要特殊的課程!只需要一個共享變量,我必須導入。而已!對? – floatingpurr

+1

這是正確的。 –

相關問題