在前面的博客中已经介绍了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
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)
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)
from flask import Blueprint acc = Blueprint("acc",__name__) @acc.route("/acc") def acc_func(): return "这是acc蓝图页面"
其实Flask-SQLAlchemy比起SQLAlchemy更加的简单自如,用法几乎一模一样,就是在配置和启动上需要注意与Flask的配合就好啦
到这里Flask-SQLAlchemy告一段落