如何从Flask扩展中访问SQLAlchemy数据库?

时间:2013-08-28 15:47:21

标签: python database sqlalchemy flask

我为我当前的Flask项目构建了一个简单的权限系统,我想将其分解为一个扩展,以便我可以共享它并在其他项目中使用它。我正在努力获取用户的SQLAlchemy数据库连接,以便在我的扩展中使用。

具体来说,我想在数据库中为使用我的扩展程序的任何人创建一些模型。我确信有这样做的模式,但我不知道。

我在这里添加了一些更多信息http://bit.ly/1dqubJQ

2 个答案:

答案 0 :(得分:3)

我喜欢这种问题的模式是没有扩展定义数据库模型,而是提供开发人员可以从中继承模型的mixin类。除了mixin之外,您还可以为数据库中的加载或保存模型等操作提供回调函数,也可由应用程序开发人员提供。

例如,Flask-Login使用此技术。我喜欢它,因为它使扩展数据库不可知。您说您有兴趣为SQLAlchemy执行此操作,但如果您发布扩展名,则某人可能希望将其用于Mongo或Peewee或没有ORM层。如果您不对扩展中的数据库引擎做任何假设,那么所有这些都将得到支持。

答案 1 :(得分:2)

您只是希望用户能够在您的扩展程序中使用他们的sqlalchemy连接吗?为什么不把它放在init?

class FlaskExtension(object):

    # db below is the user's sqlalchemy connection
    def __init__(self, app=None, db=None):
        self.app = app
        self.db = db
        if app is not None and db is not None:
            self.init_app(app,db)