А можете объяснить адекватную причину, почему экземпляр БД должен создаваться в приложении?
Если работа с моделями ведётся в отдельном пакете, то вполне логично там же объявлять и экземпляр БД. Так и целостность не нарушится реши вы, например, подключить пакет к приложению, в котором в качестве основной ОРМ используется что-то отличное от Flask-SQLAlchemy. Т.е. от самого приложения зависеть он не будет:
project/app/__init__.py:
from flask import Flask
from components.role.models import db
# ...
def create_app(config_name):
app = Flask(__name__)
# ...
db.init_app(app)
return app
project/components/role/models.py:
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Base(db.Model):
pass