flask-sqlalchemy和pipreqs

flask-sqlalchemy

sqlalchemy本身和flask没有任何关系,flask-sqlalchemy是flask的一个第三方组件,这个组件做的事情就是让使用sqlalchemy更加方便一点,但是其内部本质还是sqlalchemy
安装:pip3 install flask-sqlalchemy
flask的项目目录

下面来详细看一下我这目录
model.py


flask_app目录下的__init__.py

其中create_table.py这个离线脚本用来创建数据表,因为 db.create_all() 需要连接数据库做操作,连接需要读取app.config中的配置,单独的离线脚本执行和app没有半毛钱关系,所以需要用到
应用上下文,应用上下文中有app和g,其中app.config又是db连接数据库需要的。从这里就可以看出,为啥flask把上下文分成请求上下文和应用上下文了,比如说我们这里只用到了应用上下文的内容,
如果把请求上下文和应用上下文合成一个联合上下文,那么我们要想使用上下文的app的使用还要构造请求对象以构建一个这样的联合上下文。我们发现虽然执行了这个脚本,数据库的表依旧没有创建成功。
这又是为什么呢?因为想要离线脚本db帮我们创建表,首先db需要在内存中找到继承db.Model的类,但是就执行这个离线脚本而言,内存中根本找不到继承自db.Model的类,所以我们在from flask_app import db,create_app
执行flask_app的__init__.py的时候把类加载到内存

from flask_app import db,create_app

app = create_app()
app_ctx = app.app_context() # app_ctx = app/g
with app_ctx: # __enter__,通过LocalStack放入Local中
    db.create_all() # 调用LocalStack放入Local中获取app,再去app中获取配置

猜你喜欢

转载自www.cnblogs.com/longyunfeigu/p/9492126.html