簡體   English   中英

flask-sqlalchemy交叉數據庫,帶有“動態”架構

[英]flask-sqlalchemy cross database with “dynamic” schema

我正試圖使用​​燒瓶中的“應用工廠”模式,但我的模型似乎有雞與蛋的問題。 http://flask.pocoo.org/docs/patterns/appfactories/

我在create_app函數中導入我的視圖,該函數導入我的模型。 因此,在定義模型時,我在應用程序中沒有配置。 這通常很好,使用綁定鍵,我可以設置模型連接到不同的dbs。

但是,在這種情況下,我有兩組模型,一組來自默認數據庫,另一組是另一個數據庫連接 - 我想交叉數據庫連接。 我知道通常的方法是添加

__table_args__ = { 'schema' : 'other_db_name' }

到我的“其他數據庫”模型。

但是......取決於配置,'other_db_name'可能不同。

所以,現在我定義的模型需要配置中的模式名稱,但配置中沒有模式放入類定義中。 我也可能只是遺漏了一些我不知道的燒瓶。

(旁注 - 一個簡單的解決方法是將Sqlalchemy配置為始終在查詢中輸出模式名稱,無論如何 - 但我似乎無法找到此設置。)

如果有人對此有任何意見,我將非常感激。 謝謝!

從未嘗試過這個自己,但你也許可以強制__table_args__通過使其成為一個有懶惰的評估declared_attr

from sqlalchemy.ext.declarative import declared_attr

class MyModel(MySQLSettings, MyOtherMixin, Base):
    __tablename__='my_model'

    @declared_attr
    def __table_args__(cls):
        return { 'schema': current_app.config['OTHER_DB_NAME'] }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM