Flask-SQLAlchemy

在前面的博客中已经介绍了SQLAlchemy的简单使用,我们知道Flask有非常丰富的第三方库,那么如何在Flask框架中使用SQLAlchemy呢?Flask-SQLAlchemy模块就这么诞生了,其内部封装了原始的SQLAlchemy,并对其使用方法进行的优化。

一、安装Flask-SQLAlchemy模块

pip3 install Flask-SQLAlchemy

二、准备一个干净的Flask项目框架  点击下载

接下来基于这个Flask项目,我们要加入Flask-SQLAlchemy让项目变得生动起来。

1.加入Flask-SQLAlchemy第三方组件

from flask import Flask
# 导入Flask-SQLAlchemy中的SQLAlchemy
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()     #创建SQLAlchemy对象
# PS : 实例化SQLAlchemy的代码必须要在引入蓝图之前

from app.views.user import user
from app.views.acc import acc


def create_app():
    my_app = Flask(__name__)

    # SQLALCHEMY_DATABASE_URI 配置 SQLAlchemy 的链接字符串儿
    my_app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:12345@127.0.0.1:3306/day127?charset=utf8"
    # SQLALCHEMY_POOL_SIZE 配置 SQLAlchemy 的连接池大小
    my_app.config["SQLALCHEMY_POOL_SIZE"] = 5
    # SQLALCHEMY_POOL_TIMEOUT 配置 SQLAlchemy 的连接超时时间
    my_app.config["SQLALCHEMY_POOL_TIMEOUT"] = 15
    my_app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
    db.init_app(my_app)     #初始化my_app,本质就是将以上的配置读取出来

    my_app.register_blueprint(acc)
    my_app.register_blueprint(user)
    
    return my_app
app/__init__.py

2.建立models.py ORM模型文件

from app import db
# 这句话你是否还记的?
# from sqlalchemy.ext.declarative import declarative_base
# Base = declarative_base()
# 每一次我们在创建数据表的时候都要做这样一件事
# 然而Flask-SQLAlchemy已经为我们把 Base 封装好了

#创建User数据表
class User(db.Model):    #Base实际上就是db.Model
    __tablename__ = "user"
    __table_args__ = {"useexisting": True}
    # 在SQLAlchemy 中我们是导入了Column和数据类型 Integer 在这里
    # 就和db.Model一样,已经封装好了
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(32))

if __name__ == '__main__':
    from app import create_app
    my_app = create_app()      #创建一个app,离线脚本
    db.drop_all(app=my_app)    #清空所有继承db.Model的所有表格
    db.create_all(app=my_app)  #创建所有继承db.Model的表格
#这句话相当于sqlalchemy里面的Base.metadata.create_all(engine)
app/models.py

3.编写视图文件

from flask import Blueprint,jsonify
from app.models import User
from app import db

user = Blueprint("user",__name__)

@user.route("/user")
def user_func():
    user_obj = User(name="fengchong")
    db.session.add(user_obj)
    #上面这句话相当于做了以下四件事:
    #1.from sqlalchemy.orm import sessionmaker
    #2.Session = sessionmaker(engine)
    #3.db_session = Session()
    #4.db_session.add(user_obj)
    db.session.commit()
    return "这是user蓝图页面"

@user.route("/user_list")
def user_list_func():
    res = User.query.first()
    ret = {"username":res.name}
    return jsonify(ret)
app/views/user.py
from flask import Blueprint
acc = Blueprint("acc",__name__)

@acc.route("/acc")
def acc_func():
    return "这是acc蓝图页面"
app/views/acc.py

其实Flask-SQLAlchemy比起SQLAlchemy更加的简单自如,用法几乎一模一样,就是在配置和启动上需要注意与Flask的配合就好啦

到这里Flask-SQLAlchemy告一段落

 

posted @ 2019-02-15 20:10  中杯可乐不加冰  阅读(181)  评论(0编辑  收藏  举报