zoukankan      html  css  js  c++  java
  • 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告一段落

  • 相关阅读:
    KindEditor编辑器的使用
    导航栏
    ajax php 验证注册用户名是否存在
    PS照片改底色
    截取邮箱@后面内容的两种情况
    js导航栏单击事件背景颜色变换
    model中的自动验证 $_validate $_auto
    一对一关联模型,HAS_ONE
    一对多关联模型,BELONGS_TO
    C++操作MySQL数据库
  • 原文地址:https://www.cnblogs.com/fengchong/p/10385679.html
Copyright © 2011-2022 走看看