首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >AttributeError:'str‘对象没有属性'client’

AttributeError:'str‘对象没有属性'client’
EN

Stack Overflow用户
提问于 2019-09-02 15:33:13
回答 1查看 2.1K关注 0票数 0

我有一个代码,在这里,我正在建立与MongoDB的连接。这个代码是

ConnectMongoDB.py:

代码语言:javascript
代码运行次数:0
运行
复制
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:

代码语言:javascript
代码运行次数:0
运行
复制
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中而不是导入,它就能正常工作。但从单独的文件中看,它是错误的。

此外,客户端类型为:

代码语言:javascript
代码运行次数:0
运行
复制
 <class 'pymongo.mongo_client.MongoClient'>

理想情况下,它应该正常运行(也建立到db的连接),就像代码在ProcessData.py中时一样。不知道我在哪里失踪了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-02 20:05:37

db = CMdb.client.avengers_hack_db更改为db = cDB.client.avengers_hack_db会使错误消失,您引用的是错误的东西。静态方法的返回值是一个字符串,它没有client属性。

一个更好的方法是如果您的connect2mongodb方法将return client

代码语言:javascript
代码运行次数:0
运行
复制
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就可以工作了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57759572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档