2016-10-10 6 views
0

Я бы хотел, чтобы Python Flask читала из файла конфигурации местоположение базы данных sqlite3 без явного написания имени базы данных. Используемые шаблоны: http://flask.pocoo.org/docs/0.11/patterns/sqlite3/ и http://flask.pocoo.org/docs/0.11/tutorial/dbcon/.Флажок не может читать sqlite3 БАЗЫ ДАННЫХ из файла конфигурации

Когда я пытаюсь читать 'DATABASE' из моего конфигурационного файла я получаю следующее сообщение об ошибке:

Файл "/ приложение/my_cool_app/приложение/INIT .py", строка 42, в before_request г .db = connect_db()

Файл "/ приложение/my_cool_app/приложение/INIT .py", строка 36, в connect_db возвращение sqlite3.connect (my_cool_app.config [ 'DATABASE'])

AttributeError: объект «Blueprint» имеет нет атрибута «конфигурации»

Здесь пока мой INIT .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 (я не» т изменить его):

from app import create_app 
app = create_app() 

Вот мой INIT .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_app является экземпляром Blueprint, который не имеет атрибута 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

 Смежные вопросы

  • Нет связанных вопросов^_^