![](/img/trans.png)
[英]Query an existing mysql table in database using 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.