2016-10-10 187 views
0

我希望Python Flask從配置文件中讀取sqlite3數據庫名稱的位置而不明確寫入數據庫名稱。使用的模板是:http://flask.pocoo.org/docs/0.11/patterns/sqlite3/http://flask.pocoo.org/docs/0.11/tutorial/dbcon/Flask blueprint無法從配置文件中讀取sqlite3數據庫

當我嘗試從我的配置文件我得到以下錯誤消息讀「數據庫」:

文件「/應用程序/ my_cool_app /應用/ 初始化 py」爲42行,在before_request g^.db的= connect_db()

文件 「/應用/ my_cool_app /應用/ 初始化 py」 爲36行,在connect_db 返回sqlite3.connect(my_cool_app.config [ 'DATABASE'])

AttributeError:'Blueprint'對象具有沒有屬性「配置」

這裏是我的初始化的.py代碼時,我嘗試從配置文件讀取,並得到上述錯誤:

import sqlite3 
from flask import Flask, g 
from .views import my_cool_app 

# create application 
def create_app(debug=True): 
    app = Flask(__name__, instance_relative_config=True) 
    app.debug = debug 
    app.config.from_object('config') 
    app.config.from_pyfile('config.py') 
    app.register_blueprint(my_cool_app) 
    return app 

def connect_db(): 
    return sqlite3.connect(my_cool_app.config['DATABASE']) <= LINE 36 

@my_cool_app.before_request 
def before_request(): 
    g.db = connect_db() 

@my_cool_app.teardown_request 
def teardown_request(exception): 
    db = getattr(g, 'db', None) 
    if db is not None: 
     db.close() 

這是我run.py(我不T改變它):

from app import create_app 
app = create_app() 

這裏是我的初始化的.py代碼時,我明確寫入數據庫名稱(不是我想要的作品):

import sqlite3 
from flask import Flask, g 
from .views import my_cool_app 
DATABASE='/app/myappname/my_sqlite3_database_name.db' 

# create application 
def create_app(debug=True): 
    app = Flask(__name__, instance_relative_config=True) 
    app.debug = debug 
    app.config.from_object('config') 
    app.config.from_pyfile('config.py') 
    app.register_blueprint(my_cool_app) 
    return app 

def connect_db(): 
    return sqlite3.connect(DATABASE) 

回答

1

您的my_cool_appBlueprint的一個實例,它沒有config屬性。您需要使用current_app

import sqlite3 
from flask import Flask, g, current_app 
from .views import my_cool_app 

# create application 
def create_app(debug=True): 
    app = Flask(__name__, instance_relative_config=True) 
    app.debug = debug 
    app.config.from_object('config') 
    app.config.from_pyfile('config.py') 
    app.register_blueprint(my_cool_app) 
    return app 

def connect_db(): 
    return sqlite3.connect(current_app.config['DATABASE']) 

@my_cool_app.before_request 
def before_request(): 
    g.db = connect_db() 

@my_cool_app.teardown_request 
def teardown_request(exception): 
    db = getattr(g, 'db', None) 
    if db is not None: 
     db.close() 
+0

非常感謝你Phillip Tzou!是的,我導入了current_app,現在它按預期工作。 – user1356863