簡體   English   中英

如何正確初始化flask-sqlalchemy模塊?

[英]How to properly initialise the flask-sqlalchemy module?

使用flask-sqlalchemy ,有人知道為什么http://pythonhosted.org/Flask-SQLAlchemy/api.html中的第二種構造方法也不建議db.app = app嗎? 似乎第一種和第二種構造方法之間的主要區別只是,第一種是db.app = app而第二種是db.app = None

謝謝!

這兩種初始化方法是Flask擴展的相當標准,並遵循有關如何初始化擴展的隱式約定。 Flask文檔的這一部分中,您可以找到解釋它的注釋:

如您所見,init_app不會將應用分配給自己。 這是故意的! 基於類的Flask擴展只能在將應用程序傳遞給構造函數時將應用程序存儲在對象上。 這告訴擴展:我對使用多個應用程序不感興趣。

當擴展需要查找當前應用程序並且沒有對它的引用時,它必須使用current_app上下文本地或以可以顯式傳遞應用程序的方式更改API。

這個想法可以總結如下:

  • 如果使用SQLAlchemy(app)構造函數,則擴展名將假定app是唯一的應用程序,因此它將對它的引用存儲在self.app
  • 如果使用init_app(app)構造函數,則擴展名將假定app是許多應用程序之一。 因此,無需保存引用,而是每次需要時都依靠current_app定位應用程序。

兩種初始化擴展方式的實際區別在於,第一種格式要求應用程序存在,因為它必須在構造函數中傳遞。 第二種格式允許在應用程序存在之前創建db對象,因為您沒有將任何內容傳遞給構造函數。 在這種情況下,您db.init_app(app)的調用推遲到擁有應用程序實例為止。 如果使用應用程序工廠模式,則延遲創建應用程序實例的典型情況是。

暫無
暫無

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

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