flask-sqlalchemy组件使用

除了需要自己导入,增删改查等方法与sqlalchemy模块使用没有差别

1、安装

pip install flask-sqlalchemy

2、创建Flask app文件中导入例如__init__.py,初始化必须在导入蓝图之前,必须导入models

# 导入并实例化SQLAlchemy
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()


# 初始化
db.init_app(app)
from flask import Flask
from flask_session import Session
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

from flask_demo.views import account, user
from flask_demo.models import *

def create_app():
    app = Flask(__name__)
    
    # 配置项
    app.config.from_object("settings.DevConfig")
    app.secret_key = app.config["SECRET_KEY"]
    
    # 注册蓝图
    app.register_blueprint(account.ac, )
    app.register_blueprint(user.us)

    # 将session的值存放至redis,配置信息在settings中
    Session(app)  
    
    # 初始化SQLAlchemy
    db.init_app(app)
    return app
__init__.py

3、在配置文件中写入配置

# ##### SQLALchemy配置文件 #####
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123456@127.0.0.1:3306/userinfo?charset=utf8"
SQLALCHEMY_POOL_SIZE = 10  #线程池最大数量
SQLALCHEMY_MAX_OVERFLOW = 5  # 线程池数量最大溢出数量

4、创建models.py中的类(对应数据库表)

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column
from sqlalchemy import Integer,String,Text,Date,DateTime
from sqlalchemy import create_engine
from flask_demo import db


class School(db.Model):
    __tablename__ = 'school'

    id = Column(Integer, primary_key=True)
    name = Column(String(32), index=True, nullable=False)
    depart_id = Column(Integer)

5、写一个脚本,用于生成表(需要使用app上下文):只能生成和删除表,不能对表字段进行更新或者修改

from flask_demo 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(app=app)  # 调用LocalStack放入Local中获取app,再去app中获取配置

6、基于ORM对数据库进行操作

from flask import Blueprint, session
from flask_demo import db
from flask_demo import models

ac = Blueprint("ac", __name__)


@ac.route("/index")
def index():
    session["user_id"] = 1
    # db.session.add(models.School(name="清华大学计算机科学系", depart_id=1))
    # db.session.commit()  # 提交更新
    # db.session.remove()  # 关闭连接
    ret = db.session.query(models.School).all()
    print(ret)
    db.session.remove() 
    return "index"
原文地址:https://www.cnblogs.com/aizhinong/p/12796310.html