有2个共享数据库的烧瓶页面,需要合并他们的模型

时间:2016-08-12 23:56:25

标签: python flask flask-sqlalchemy

需要一些指导。我有两个页面或使用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

所以我需要将两个页面的模型合并到一个模型文件中,这样我就可以更好地控制我的数据库模式,迁移等。我怎样才能以正确的方式做到这一点?

1 个答案:

答案 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

如果您不喜欢循环导入方法,可以尝试将模型子类定义包装在函数中,您可以从顶部的flaskappextranet导入该函数。该文件,稍后以db作为参数调用。 (我还没有测试过这个。)