前言

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​​,数据库就会有新增数据

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

一次添加多个数据,用​​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!"
}

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

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()的区别可以看前面这篇​

修改和删除

修改数据 用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()​​ 也会自动保存了。