flask_sqlalchemy create_all,无需导入模型

时间:2017-03-20 21:29:41

标签: python sqlalchemy flask-sqlalchemy

我试图了解如何设置调用create_all的独立脚本,而无需将所有模型导入其中。以下是相关文件:

db.py

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

test_model.py

from db import db

class TestTable(db.model):
    id = db.Column(db.Integer, primary_key=True)
    foo = db.Column(db.String(80))

create_all.py

from db import db

db.create_all()

但是,create_all不会执行任何操作,因为它不会检测到注册到它的任何表,除非它们已导入。有没有办法在声明模型时将它们添加到"注册表"绕过显式导入?

1 个答案:

答案 0 :(得分:0)

总之,不。您将必须以一种或另一种方式在调用create_all()之前导入这些模型。声明性类构建Table实例,并在构造类本身时将其添加到MetaData中。如果MetaData不包含任何表,则create_all将不执行任何操作。

换一种说法,除非对那些声明进行评估,否则“声明模型”什么都不做,因此必须执行该模块。从它导入就可以做到这一点。