前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask 学习-14.Flask-SQLAlchemy ORM操作数据库增删改查

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

作者头像
上海-悠悠
发布2022-08-29 17:43:24
7300
发布2022-08-29 17:43:24
举报
文章被收录于专栏:从零开始学自动化测试

前言

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

创建模型

先创建模型

代码语言:javascript
复制
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()

代码语言:javascript
复制
@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()

代码语言:javascript
复制
@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 查询数据

查询表的全部数据

代码语言:javascript
复制
Students.query.all()

查询示例

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

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

代码语言:javascript
复制
[<Students(name='yy', fullname='yoyo', nickname='None')>, <Students(name='yy1', fullname='yoyo1', nickname='None')>]

查询第一个结果

代码语言:javascript
复制
Students.query.first()

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

代码语言:javascript
复制
Students.query.get(1)

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

支持filter() 和 filter_by() 查询

代码语言:javascript
复制
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()

代码语言:javascript
复制
# 修改
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() 才会生效,很多小伙伴容易忘记这个操作,在配置里面可以加一个配置项

代码语言:javascript
复制
    # 不需要commit 自动保存, 默认False
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

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

2022年第 12期《python接口web自动化+测试开发》课程,9月17号开学!

本期上课时间:2022年9月17号 - 2022年12月17号,周六周日上午9:00-11:00

报名费:报名费3000一人(周期3个月)

联系微信/QQ:283340479

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 创建模型
  • 新增数据
  • query 查询数据
  • 修改和删除
  • 自动提交commit()
    • 报名费:报名费3000一人(周期3个月)
      • 联系微信/QQ:283340479
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档