【问题标题】:Is it safe to re-create a SQLAlchemy object while server is running?在服务器运行时重新创建 SQLAlchemy 对象是否安全?
【发布时间】:2018-09-30 04:57:28
【问题描述】:

我们的应用程序使用flask + gunicorn。现在我们想让它能够在运行时重新加载数据库配置,这意味着它可以切换到新的数据库而无需重新启动过程。在配置中心的帮助下,我们可以在运行时调度配置,但是如何重新初始化全局变量数据库?

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)

这样做可以吗?就我而言,它会导致线程安全之类的问题,并可能破坏 Transaction。

帮帮我,非常感谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 2023-04-02
      • 2011-01-28
      • 2021-04-13
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多