这是这个问题的延续。
由于我的烧瓶应用程序不应该在我的数据库中写入任何内容,因此我设置了 Flask-SQLAlchemy 以反映我的数据库。这样,当我更改架构时,我不必更改模型:
# app/__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
def create_app():
app = Flask(__name__)
db.init_app(app)
with app.app_context():
db.Model.metadata.reflect(db.engine)
# app/models.py
from app import db
class Data(db.Model):
__table__ = db.Model.metadata.tables['data']
但是现在,如果我必须在创建应用程序之前导入模型,我会遇到错误,因为尚未设置元数据。这是一个测试时的问题,例如:
# test.py
import unittest
from app import create_app, db
from app.models import Data
class TestGUI(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.app = create_app()
# etc ...
导入时会引发此KeyError: 'data'
问题,因为在函数运行之前未正确设置元数据。__table__ = db.Model.metadata.tables['data']
app.models
create_app()