簡體   English   中英

Flask-sqlalchemy 連接到現有數據庫

[英]Flask-sqlalchemy connecting to an existing database

我正在嘗試連接到現有數據庫,但不確定將db.Model.metadata.reflect(db.engine)放在哪里,如以下問題所示。

我的燒瓶應用程序的結構如下:

在此處輸入圖片說明

我不確定在哪里添加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

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)

我在尋找相同問題的答案時遇到了您的問題,並且由於它幫助我真正達到了目標,因此我必須確保回來為您提供幫助解決我的問題的方法。

認為發生的事情是包含應用程序工廠的__init__.py是從我的 run.py 導入的,因此導入了位於__init__文件底部的 models.py,它在我可以運行之前導入函數來創建應用程序,但沒有任何上下文可以從中提取該表。 這至少是我目前能解釋的最好的。

為我解決的是將模型導入移動到應用程序工廠中,明確在應用程序上下文下,緊跟在 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

不確定這是否是最好的方法,但從那以后它一直對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM