0

这是这个问题的延续。

由于我的烧瓶应用程序不应该在我的数据库中写入任何内容,因此我设置了 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.modelscreate_app()

4

1 回答 1

0

我确实找到了解决方案(感谢@snakecharmerb)。解决方案只是为了避免问题,app.models在运行前不导入create_app()。有点hacky,所以当你有更好的解决方案时,也可以随意发布答案。我的测试文件现在看起来像这样:

# test.py
import unittest
from app import create_app, db
app = create_app()
from app.models import Data


class TestGUI(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.app = app
# etc ...
于 2021-07-25T18:51:43.097 回答