Flask-sqlalchemy连接到现有数据库

时间:2017-08-31 21:59:30

标签: python flask sqlalchemy flask-sqlalchemy

我正在尝试连接到现有数据库,我不确定将db.Model.metadata.reflect(db.engine)放在哪里,如下面的question所示。

我的烧瓶应用程序结构如下:

enter image description here

我不确定在哪里添加db.Model.metadata.reflect(db.engine)

intel\__init__.py我正在使用一个函数创建app:

def create_app():
    app = Flask(__name__)
    app.config.from_object('config')
    register_extensions(app)
    register_blueprints(app)
    return app

在我的register_extensions函数中:

def register_extensions(app):
    db.init_app(app)
    db.Model.metadata.reflect(db.engine)
    return None
my model\sam.py

中的

from intel.database import db


class Sam(db.Model):
    __table__ = db.Model.metadata.tables['sam_monthly_extract']

现在,当我这样做时,我收到一个错误:

Traceback (most recent call last):
  File "run.py", line 1, in <module>
    from intel import create_app
  File "C:\Users\spitf\G2XChange\intel_app\intel\__init__.py", line 6, in <module>
    from intel.views.sam_view import sam_blueprint
  File "C:\Users\spitf\G2XChange\intel_app\intel\views\sam_view.py", line 3, in <module>
    from intel.models.sam import Sam
  File "C:\Users\spitf\G2XChange\intel_app\intel\models\sam.py", line 4, in <module>
    class Sam(db.Model):
  File "C:\Users\spitf\G2XChange\intel_app\intel\models\sam.py", line 5, in Sam
    __table__ = db.Model.metadata.tables['sam_monthly_extract']
KeyError: 'sam_monthly_extract'

我做错了什么?

编辑:

run.py

from intel import create_app

app = create_app()
app.run(debug=True)

1 个答案:

答案 0 :(得分:1)

在寻找相同确切问题的答案时,我遇到了您的问题,由于它实际上帮助了我,所以我必须确保回来并为您提供解决我问题的方法。

认为发生的事情是,包含应用程序工厂的__init__.py是从我的run.py导入的,而models.py的导入也是从底部导入的__init__文件的文件名,该文件是在运行功能创建应用程序之前导入的,并且没有任何可从中提取该表的上下文。至少这是目前我能解释的最好的结果。

为我解决的是在db.init_app()之后,在应用上下文中显式地将导入的模型移入应用程序工厂,如下所示:

def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

    db.init_app(app)

    with app.app_context():
        db.Model.metadata.reflect(db.engine)
        from app import models

不确定这是否是最好的方法,但是从那以后它一直对我有用。