Flask 学习-14.Flask-SQLAlchemy ORM操作数据库增删改查

前言

SQLAlchemy采用简单的Python语言,提供高效和高性能的数据库访问,实现了完整的企业级持久模型。
它提供了SQL工具包和ORM(对象关系映射)工具,类似于Django 自带的 ORM 框架操作数据库。

创建模型

先创建模型

from flask import Flask, url_for, request, redirect, render_template
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
# 设置数据库连接地址
DB_URI = 'mysql+pymysql://root:123456@127.0.0.1:3306/web'
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
# 是否追踪数据库修改,一般不开启, 会影响性能
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 是否显示底层执行的SQL语句
app.config['SQLALCHEMY_ECHO'] = True

# 初始化db,关联flask 项目
db = SQLAlchemy(app)


# 创建模型
class Students(db.Model):
    __tablename__ = 'students'  # 数据库表名

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20))
    fullname = db.Column(db.String(30))
    nickname = db.Column(db.String(30))

    def __repr__(self):
        return "<Students(name='%s', fullname='%s', nickname='%s')>" % (
                 self.name, self.fullname, self.nickname)

if __name__ == '__main__':
    # 创建表
    db.create_all()
    app.run(debug=True)

新增数据

往表里面添加数据db.session.add()

@app.route('/demo', methods=["GET"])
def demo():
    # 实例化 Students 模型对象
    user = Students(name='yy', fullname='yoyo')
    # 添加到会话,并用commit提交数据
    db.session.add(user)
    db.session.commit()
    return {
        "code": 0,
        "msg": "create success!"
    }

访问接口地址http://127.0.0.1:5000/demo,数据库就会有新增数据

一次添加多个数据,用db.session.add_all()

@app.route('/demo', methods=["GET"])
def demo():
    # 实例化 Students 模型对象
    user1 = Students(name='yy1', fullname='yoyo1')
    user2 = Students(name='yy2', fullname='yoyo2')
    user3 = Students(name='yy3', fullname='yoyo3')
    # 添加到会话,并用commit提交数据
    # db.session.add(user)
    db.session.add_all([user1, user2, user3])
    db.session.commit()
    return {
        "code": 0,
        "msg": "create success!"
    }

query 查询数据

查询表的全部数据

Students.query.all()

查询示例

@app.route('/demo', methods=["GET"])
def demo():
    # 返回列表
    all = Students.query.all()
    print(all)
    return {
        "code": 0,
        "msg": "success"
    }

查询结果返回一个对象列表

[<Students(name='yy', fullname='yoyo', nickname='None')>, <Students(name='yy1', fullname='yoyo1', nickname='None')>]

查询第一个结果

Students.query.first()

get()方法可以直接通过id查询

Students.query.get(1)

如果没有查询到结果返回None, 这一点处理的比较好

支持filter() 和 filter_by() 查询

Students.query.filter(Students.name == 'yy').all()
Students.query.filter_by(name='yy').all()

关于filter() 和 filter_by()的区别可以看前面这篇https://www.cnblogs.com/yoyoketang/p/16487628.html

修改和删除

修改数据 用update()方法,删除用delete()

# 修改
Students.query.filter_by(name='yy').update({"fullname": "xx"})
db.session.commit()

# 删除
Students.query.filter_by(name='yy').delete()
db.session.commit()

需注意修改和删除跟新增数据一样,都需要调用commit()才会执行成功

自动提交commit()

除了查询操作,其它添加数据修改数据,都需要加上 db.session.commit() 才会生效,很多小伙伴容易忘记这个操作,在配置里面可以加一个配置项

    # 不需要commit 自动保存, 默认False
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

这样不用 db.session.commit() 也会自动保存了。

posted @ 2022-08-23 20:19  上海-悠悠  阅读(947)  评论(0编辑  收藏  举报