在服务器运行时重新创建SQLAlchemy对象是否安全?

时间:2018-09-30 04:57:28

标签: python flask thread-safety flask-sqlalchemy gunicorn

我们的应用程序使用长颈瓶+金枪鱼。现在,我们希望它能够在运行时重新加载数据库配置,这意味着它可以切换到新的数据库,而无需重新启动过程。借助config center,我们可以在运行时调度config,但是如何重新初始化全局varibale db?

db = SQLAlchemy()
def create_app():
    app = Flask(__name__)
    app.config.from_object(dynamic_config)
    db.init_app(app)

并假设有一段时间。我们调度新的配置,如何用新的配置初始化db?还是仅将其替换为新的SQLAlchemy()实例是否安全?像这样:

from models import set_db # which will set global db to new instance
from app import app
def callback(odl, new):  
    new_db = SQLAlchemy()
    # re-construct config with old, and new
    # now app.config is updated
    new_db.init_app(app)
    set_db(new_db)

可以这样做吗?就我而言,这将导致诸如线程安全之类的事情并可能破坏事务。

请帮帮我,非常感谢

1 个答案:

答案 0 :(得分:0)

如果我是我,我将使用SQLALCHEMY_BINDS配置或具有不同配置的db不同实例,而不是每次都更改配置。 而且我认为使用应用程序更改数据库结构不是一个好习惯(如果您这样做的话)