Python 如何将PyMongo与烧瓶蓝图结合使用?

Python 如何将PyMongo与烧瓶蓝图结合使用?,python,mongodb,flask,pymongo,Python,Mongodb,Flask,Pymongo,在蓝图中提取mongo对象的正确方法是什么 下面是我如何让我的父母登录.py: app.config.from_object('config') from flask.ext.pymongo import PyMongo from child import child from child2 import child2 app = Flask(__name__) app.register_blueprint(child2.child2) app.register_blueprint(chil

在蓝图中提取mongo对象的正确方法是什么

下面是我如何让我的父母登录.py:

app.config.from_object('config')
from flask.ext.pymongo import PyMongo
from child import child
from child2 import child2


app = Flask(__name__)
app.register_blueprint(child2.child2)
app.register_blueprint(child.child)
在my
child.py中

from app import app
from flask.ext.pymongo import PyMongo

mongo = PyMongo(app)
child = Blueprint('child', __name__)
MONGO_DBNAME = 'xxx'

MONGO_URL = os.environ.get('MONGO_URL')
if not MONGO_URL:
    MONGO_URL = "mongodb://xxx:xxxx@xxxx.mongolab.com:55822/heroku_xxx";

MONGO_URI = MONGO_URL
child2.py
与child的结构相同:

from app import app
from flask.ext.pymongo import PyMongo
    
mongo = PyMongo(app)
child2 = Blueprint('child2', __name__)
这是我收到的错误消息:

raise Exception('duplicate config_prefix "%s"' % config_prefix)
Exception: duplicate config_prefix "MONGO"

我在蓝图中尝试了以下几点

mongo = app.data.driver
但这会引起错误。以下是完整的回溯:

    Traceback (most recent call last):
  File "login.py", line 12, in <module>
    from child import child
  File "/home/xxx/xxx/child/child.py", line 13, in <module>
    mongo = PyMongo(app) #blueprint
  File "/home/xxx/xxx/lib/python3.4/site-packages/flask_pymongo/__init__.py", line 97, in __init__
    self.init_app(app, config_prefix)
  File "/home/xxx/xxx/lib/python3.4/site-packages/flask_pymongo/__init__.py", line 121, in init_app
    raise Exception('duplicate config_prefix "%s"' % config_prefix)
Exception: duplicate config_prefix "MONGO"
(xxx)xxx@linux:~/xxx$ python login.py 
Traceback (most recent call last):
  File "login.py", line 12, in <module>
    from courses import courses
  File "/home/xxx/xxx/child/child.py", line 13, in <module>
    mongo = PyMongo(app) #blueprint
  File "/home/xxx/xxx/lib/python3.4/site-packages/flask_pymongo/__init__.py", line 97, in __init__
    self.init_app(app, config_prefix)
  File "/home/xxx/xxx/lib/python3.4/site-packages/flask_pymongo/__init__.py", line 121, in init_app
    raise Exception('duplicate config_prefix "%s"' % config_prefix)
Exception: duplicate config_prefix "MONGO"
这是
config.py

from app import app
from flask.ext.pymongo import PyMongo

mongo = PyMongo(app)
child = Blueprint('child', __name__)
MONGO_DBNAME = 'xxx'

MONGO_URL = os.environ.get('MONGO_URL')
if not MONGO_URL:
    MONGO_URL = "mongodb://xxx:xxxx@xxxx.mongolab.com:55822/heroku_xxx";

MONGO_URI = MONGO_URL

我在回答中尝试了下面的建议,但没有成功。请参见下面我的评论,该预期答案。

您正在两次初始化PyMongo驱动程序,一次在
child.py
中,第二次在
child2.py

尝试在设置应用程序对象的文件中初始化PyMongo连接,然后将其导入子对象:

login.py:

app.config.from_object('config')
from flask.ext.pymongo import PyMongo
from child import child
from child2 import child2


app = Flask(__name__)
mongo = PyMongo(app)

# Register blueprints
def register_blueprints(app):
    # Prevents circular imports
    app.register_blueprint(child2.child2)
    app.register_blueprint(child.child)

register_blueprints(app)
在child.py中

from app import app, mongo

child = Blueprint('child', __name__)
child2.py:

from app import app, mongo

child2 = Blueprint('child2', __name__)

Emanuel Ey提出的在蓝图中执行导入的方法的一个问题是,它会导致循环导入。经过多次播放,我发现唯一的方法(我能找到)是创建一个名为
database.py
的单独文件,该文件连接到数据库,然后我可以按如下方式将此连接导入到by blueprint:

child.py

from database import mongo
courses = Blueprint('courses', __name__)
和my
database.py

from flask.ext.pymongo import PyMongo
mongo = PyMongo() 
和应用程序login.py,但必须初始化数据库

from database import mongo
app = Flask(__name__)
app.config.from_object('config')
mongo.init_app(app) # initialize here!

from child import child 
from child import2 child2

app.register_blueprint(child.child)
app.register_blueprint(child2.child2)

您是否在login.py和child.py中都有
mongo=PyMongo(app)
?能否向我们显示您项目的文件结构?导入失败,即尝试从app import app导入
,mongo
,以及:
从app import mongo导入mongo as mongo
,出现以下问题:
ImportError:cannotimportname'mongo'
同样,app,config位于
app=Flask(\uuuu name\uuuu)
之前,您可能希望通过将database.py更改为settings.py并在此处设置各种配置项来进一步概括这一点。