需要一些指导。我有两个页面或使用flask(+ sqlalchemy)制作的应用程序 - 一个作为首页,另一个作为第一个管理员或外联网。
应用程序使用自己的视图和模型,但它们共享相同的数据库,当我尝试更改架构时,这开始变得混乱。
项目的设置方式是下一步: file structure image
/www
|- /flaskapp
| |- /flaskapp
| |- models.py
| |- views.py
| |- form.py
| |- init.py
| |- oauth.py
| |- /static
| |- /templates
| |- /flask
|
|- /extranet
|-/extranet
|- models.py
|- views.py
|- form.py
|- init.py
|- oauth.py
|- /static
|- /templates
所以我需要将两个页面的模型合并到一个模型文件中,这样我就可以更好地控制我的数据库模式,迁移等。我怎样才能以正确的方式做到这一点?
答案 0 :(得分:0)
目前尚不清楚您要解决的问题。 SQLAlchemy有一个declarative API,允许你对一些基类进行子类化(在Flask-SQLAlchemy中,传统上,db.Model
);然后它会在数据库中的子类和表之间自动构建mappings。
只要db
引用两个SQLAlchemy
文件中的相同models.py
对象(例如,已从同一范围导入),就会为整个模式形成映射。如果您需要使用具有完整映射集的db
对象运行某种迁移工具,您可以编写一个模块:
# combine_db.py
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask()
db = SQLAlchemy(app)
import flaskapp.models # imports `db` from combine_db
import extranet.models # imports `db` from combine_db
然后,您的迁移工具可以从db
导入combine_db
!
如果您不喜欢循环导入方法,可以尝试将模型子类定义包装在函数中,您可以从顶部的flaskapp
和extranet
导入该函数。该文件,稍后以db
作为参数调用。 (我还没有测试过这个。)