我有一个代码,在这里,我正在建立与MongoDB的连接。这个代码是
ConnectMongoDB.py:
import pymongo
from pymongo import MongoClient
from flask import Flask, render_template, request,redirect,url_for
app = Flask(__name__)
# Connection to MongoDB
class ConnectMdb:
@staticmethod
def connect2mongodb():
global client
try:
client = pymongo.MongoClient("mongodb") # modified to avoid showing actual string. Kindly ignore this part.
print("Connected to Avengers MongoClient Successfully!!!")
print (type(client))
print(client)
except:
print("Connection to MongoClient Failed!!!")
#db = client.avengers_hack_db
return("Connection established")
if __name__ == '__main__':
ConnectMdb.connect2mongodb()
我将此脚本导入到另一个具有业务逻辑的程序中。以下是与这一问题相关的代码的某些部分:
ProcessData.py:
import pymongo
from pymongo import MongoClient
import datetime
import sys
from flask import Flask, render_template, request
#import ProcessTaskData
#import werkzeug
import ConnectMongoDB as cDB
app = Flask(__name__)
CMdb = cDB.ConnectMdb.connect2mongodb()
db = CMdb.client.avengers_hack_db
@app.route('/')
def index():
return render_template('index.html')
@app.route('/Avengers',methods = ['POST'])
def Avengers():
ip = request.remote_addr
Project_ID = request.form['pid']
Name = request.form['pname']
Resource_Names = request.form['rsrc']
db.ppm_master_db_collection.insert_many([
{"Org_Id":"",
"Name": Name,
"last_modified": datetime.datetime.utcnow()}
])
return render_template('ptasks.html', user_ip=ip)
@app.route('/ProjectTasks',methods = ['POST'])
def ProjectTask():
ip = request.remote_addr
Task_ID = request.form['tid']
TAlert = request.form['talrt']
TResource_Names = request.form['trsrc']
db.ppm_tasks_data_collection.insert_many([
{"Task_ID": Task_ID,
"Resource_Names": TResource_Names,
"last_modified": datetime.datetime.utcnow()}
])
return render_template('ptasks.html', user_ip=ip)
if __name__ == '__main__':
app.run(debug = True)
如果我将来自ConnectMongoDB.py的代码直接放在ProcessData.py中而不是导入,它就能正常工作。但从单独的文件中看,它是错误的。
此外,客户端类型为:
<class 'pymongo.mongo_client.MongoClient'>
理想情况下,它应该正常运行(也建立到db的连接),就像代码在ProcessData.py中时一样。不知道我在哪里失踪了。
发布于 2019-09-02 12:05:37
将db = CMdb.client.avengers_hack_db
更改为db = cDB.client.avengers_hack_db
会使错误消失,您引用的是错误的东西。静态方法的返回值是一个字符串,它没有client属性。
一个更好的方法是如果您的connect2mongodb
方法将return client
class ConnectMdb:
@staticmethod
def connect2mongodb():
try:
client = pymongo.MongoClient("mongodb") # modified to avoid showing actual string. Kindly ignore this part.
print("Connected to Avengers MongoClient Successfully!!!")
print (type(client))
print(client)
except:
raise Exception("Connection to MongoClient Failed!!!")
return client
这样,db = CMdb.client.avengers_hack_db
就可以工作了。
https://stackoverflow.com/questions/57759572
复制