Flask-SQLAlchemy 初始化源码和蓝图blueprint源码小分析

一. Flask-SQLAlchemy 初始化源码

在文件中定义了工厂函数 create_app :

def create_app(config):
    """ 可以根据传入的 config 名称,加载不同的配置
    """

    app = Flask(__name__)
    app.config.from_object(configs.get(config))
    # SQLAlchemy 的初始化方式改为使用 init_app
    db.init_app(app)

如上所示的最后一行代码,db 对象一般是在models.py 文件中定义的 SQLAlchemy 类的实例,db = SQLAlchemy()。这里将应用对象作为参数调用实例的 init_app 方法进行初始化。

到现在为止我们只知道初始化,但并不知道实际发生了什么。

我们看下 SQLAlchemy 这个类的源码,首先它是来自 flask_sqlalchemy.__init__ 模块中:

cd /usr/local/lib/python3.8/dist-packages/flask_sqlalchemy
sudo vim __init__.py
class SQLAlchemy(object):
    """This class is used to control the SQLAlchemy integration to one
    or more Flask applications.  Depending on how you initialize the
    object it is usable right away or will attach as needed to a
    Flask application.

    There are two usage modes which work very similarly.  One is binding
    the instance to a very specific Flask application::

        app = Flask(__name__)
        db = SQLAlchemy(app)

因为在创建该类的实例的时候,没有提供参数,我们就直接看 init_app 方法的源码:

在这里插入图片描述
如上图所示,init_app 方法只需要提供一个 app 参数,也就是应用对象。

在第 847 行有一个判断,要求 app.config 这个类字典对象中必须要有 SQLALCHEMY_DATABASE_URI 或者 SQLALCHEMY_BINDS 这两个配置项中的一个,不然就会抛出一个警告信息:默认使用 SQLite3 作为数据库。

我们已经在配置文件中定义了 SQLALCHEMY_DATABASE_URI ,所以不会出现这个警告。

下面就是一堆给 app.config 字典对象添加默认键值对的操作。

继续向下查看源码,如下图所示第 884 行是最重要的:
在这里插入图片描述
应用对象在初始化的时候,定义了一个 extensions 属性,

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值