python - Flask-sqlalchemy 连接到现有数据库

标签 python flask sqlalchemy flask-sqlalchemy

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

我的 flask 应用程序的结构如下:

enter image description here

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

intel\__init__.py 中,我使用一个函数来创建应用程序:

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

我的模型\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)

最佳答案

我在寻找同一问题的答案时遇到了您的问题,因为它帮助我真正实现了目标,所以我必须确保回来并向您提供有助于解决我的问题的内容。

认为发生的事情是包含应用程序工厂的__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

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

关于python - Flask-sqlalchemy 连接到现有数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45990681/

相关文章:

python - 如何将 .csv 训练数据提供给 mxnet 中的卷积神经网络?

python - 在 PostgreSQL、Python、Jinja2 上编码

flask - Flask_Admin在创建/编辑中不包括某些列,但包含在列表中

python - SQLAlchemy:禁用延迟加载并仅在 join() 上加载对象

python - PRAW/Tweepy 过滤关键字

python - Flake8 无法在自定义格式化程序上加载插件 "N8"

python:将元素插入到元组列表内的元组中

python - Flask API 无法解码 JSON 数据。错误: "message": "Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)"

python - SQLAlchemy 在一个事务中更新多行

python - Q : SQLAlchemy 1. 4 (2.0) 从 session.execute(statement).scalars().all() 或 session.execute(statement).all() 转换结果时出现问题