Flask flash迁移多个模型.py

Flask flash迁移多个模型.py,flask,flask-sqlalchemy,flask-migrate,Flask,Flask Sqlalchemy,Flask Migrate,我有一个关于你的问题。 我正在使用Flask创建一组web服务。我将每个web服务拆分到python应用程序中自己的包中 应用程序结构如下所示: MyApp WS1 models.py WS2 models.py 通用软件包 models.py 如何导入所有模块并初始化数据库?我已尝试手动导入所有这些文件,但不起作用。 我知道,如果我分别从WS1或Ws2导入“应用程序”,它是有效的,但我想在单个操作中实现这一点,这可能吗 您可以在此处找到Flask migrate的代码: #!virtualen

我有一个关于你的问题。 我正在使用Flask创建一组web服务。我将每个web服务拆分到python应用程序中自己的包中

应用程序结构如下所示:

MyApp WS1 models.py WS2 models.py 通用软件包 models.py

如何导入所有模块并初始化数据库?我已尝试手动导入所有这些文件,但不起作用。 我知道,如果我分别从WS1或Ws2导入“应用程序”,它是有效的,但我想在单个操作中实现这一点,这可能吗

您可以在此处找到Flask migrate的代码:

#!virtualenv/bin/python

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from config import SQLALCHEMY_DATABASE_URI

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI
db = SQLAlchemy(app)

migrate = Migrate(app, db)

manager = Manager(app)
manager.add_command('db', MigrateCommand)

from WS1.models import Class1, Class2, Class3    <--- This is not importing
from WS2.models import Class4, Class5, Class6    <--- This is not importing

if __name__=='__main__':
    manager.run()
所有模型都导入此模块并从基础继承

Thanks a lot,

Enrico

当您定义自定义声明性基础时,您不再真正使用
Flask SQLAlchemy
Flask Migrate
Flask SQLAlchemy
的内部声明性基础读取模型。(这就是为什么您必须同时使用
app
db
初始化
Migrate

Flask有一个导入周期问题的答案:大多数Flask扩展都有一个
.init\u app()
方法来延迟在必要时初始化扩展

在当前手动创建
Base
的模块中,只需执行
db=SQLAlchemy()
,然后在模型中导入
db
,并使用
db.models
作为声明基础,而不是
Base
。在您的
app.py
中,执行以下操作:

from dbpackagename import db

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI

db.init_app(app) 

您是否尝试过更早地导入模型,例如在初始化
Migrate
之前?我已经尝试过,但仍然无法工作:/model类必须从
db.model
继承才能导入。我猜他们不会,因为你可能会有一个导入周期。将
db
声明移动到一个无需循环即可导入的地方,并让所有模型类扩展
db.model
。这就是问题所在,我对python/flask/sqlalchemy很陌生。我已经创建了一个解决方案的工作原型,现在我开始正确地编写实际的解决方案。出于这个原因,我正在尝试正确地分离类/模块/包。我想到的是,我创建了一个SQLAlchemyDatabase模块,就像您可以在我的问题的编辑版本中找到的模块一样,然后我的SQLAlchemy模型继承自SQLAlchemyDatabase。从我所读到的,这应该是正确的,为什么我错了?(您的时间:泰铢)
from dbpackagename import db

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI

db.init_app(app)