① flask-sqlalchemy 和sqlalchemy的區別
flask-sqlalchemy把它的執行上下文綁定在了flask的app的context上。
但sqlalchemy本身提供了scoped_session.
如果把一個線程看成一個目錄,那麼其下有app.context棧和sqlalchemy.scoped_session2個資源。
現在他的實現,把sqlalchemy.scoped_session的資源放在了app.context棧下。
如果需要自己起個worker線程來處理redis的消息並寫入資料庫,那麼flask-sqlalchemy的db對象就沒有辦法在自己的線程里執行了。
<a target="_blank" href="mailto:%E7%9B%B8%E5%8F%8D%E5%A6%82%E6%9E%9C%E6%8A%8Adb%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%92%8Capp%E7%9A%84context%E8%84%B1%E7%A6%BB%E5%BC%80%E6%9D%A5%EF%BC%8C%E5%B0%B1%E7%81%B5%E6%B4%BB%E5%A4%9A%E4%BA%86%E3%80%82%E5%8F%8D%E6%AD%A3%E5%8F%AA%E8%A6%81%E6%B3%A8%E5%86%8C%E4%B8%80%E4%B8%8B@<a href=" member="" app"="" style="color: rgb(119, 128, 135); text-decoration: none; word-break: break-all; font-family: 'Helvetica Neue', 'Luxi Sans', 'DejaVu Sans', Tahoma, 'Hiragino Sans GB', 'Microsoft Yahei', sans-serif; line-height: 22.4px; white-space: normal; background-color: rgb(255, 255, 255);">app.xn--teardown_appcontext,session-8x78c.xn--remove()ok-3m3p752k.">相反如果把db的實現和app的context脫離開來,就靈活多了。反正只要注冊一下@app.teardown_appcontext,把session.remove()就ok了。