2017-10-05 426 views
0

我嘗試使用mongoengine連接mongodb數據庫與動態連接。我從URL請求獲取數據庫名稱。問題是它只連接了第一個url數據庫。使用mongoengine動態連接到mongodb數據庫

這裏是mycode的

run.py

from application import app 
if __name__ == '__main__': 
    app.run(host='0.0.0.0', port=8089) 

routes.py

from flask import request 
from application import app 
from mongoengine import connect 

class DBConnection(): 
    def __init__(self): 
     database = request.url.split("/")[2].split(".")[0] 
     print(database) 
     connect(database,alias='default') 

@app.route('/',methods=['GET']) 
def index(): 
    try: 
     DBConnection(); 
     return redirect(url_for('dashboard')) 
    except Exception as e: 
     raise e 

在上面的代碼時,我打網址mydomain.maindomain.com它將連接mydomai ñ和命中URL yourdomain.maindomain.com將與YOURDOMAIN

的問題是,它只有一個數據庫連接進行連接。例如我第一次打mydomain.maindomain.com然後數據庫是每個時間MYDOMAIN連接即使我打yourdomain.maindomain.com其顯示MYDOMAIN數據庫記錄。

+0

爲什麼你存儲'routes'?每個請求都需要新的'db_connection',但默認存儲。還有一點,如何在分開的請求中攜帶數據庫連接?使用'MongoClient',像這樣''從pymongo導入MongoClient; c = MongoClient('localhost',27017); c [param_X] .what_you_do_with_this' – dsgdfg

+0

mongoengine提供模型功能,如果我使用MongoClient然後獲取查詢是db.foo.find_one (...)如果我使用mongoengine只是做model.objects()它的容易。 –

回答

0

我不認爲你需要使用不同的數據庫。只需爲每個用例使用不同的集合,然後用Flask-MongoEngine包裝應用程序。

PS。更好地瞭解變量作用域在Flask中的工作方式。