【MySQL入门】(五)Flask使用MySQL存储数据

【MySQL入门】(五)Flask使用MySQL存储数据

本文基于MySQL 8.0.29 和 Python 3.8。

1. flask_sqlalchemy简介

Flask-SQLAlchemy 是一个为 Flask 应用增加 SQLAlchemy 支持的扩展,也是一种数据库框架,支持多种数据库后台。它致力于简化在 Flask 中 SQLAlchemy 的使用,提供了有用的默认值和额外的助手来更简单地完成常见任务。无须关心SQL处理细节,通过调用方法操作数据库。这是flask_sqlalchemy的中文文档

2. 安装pymysql,sqlalchemy,flask_sqlalchemy

pip install pymysql sqlalchemy flask_sqlalchemy

3. 配置一个简单的Flask应用

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://{}:{}@{}/{}?charset=utf8mb4" \
										.format('root','密码','x.x.x.x:3306','数据库名')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True  # 每次请求结束后会自动提交数据库中的变动
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True  # 事件系统跟踪修改
db = SQLAlchemy(app)  # 实例化数据库对象,它提供访问Flask-SQLAlchemy的所有功能

4. 定义一个类(对应数据库中的表)

class Myuser(db.Model):  # 所有模型的基类叫 db.Model,它存储在创建的SQLAlchemy实例上。
    #定义表名
    __tablename__ = 'myuser'
    #定义字段
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=False)
    money = db.Column(db.Float, unique=False)

    #__repr__()方法显示一个可读字符串,用于调试、测试
    def __repr__(self):
        return '<Myuser id:{} name:{} money:{}>'.format(self.id,self.name,self.money)

这是一个简单的实例:
简单的实例
常见的 SQLalchemy 列类型

类型名称python类型描述
Integerint常规整形,通常为32位
SmallIntegerint短整形,通常为16位
BigIntegerint 或 long精度不受限整形
Floatfloat浮点数
Numericdecimal.Decimal定点数
Stringstr可变长度字符串
Textstr可变长度字符串,适合大量文本
Unicodeunicode可变长度Unicode字符串
Booleanbool布尔型
Datedatetime.date日期类型
Timedatetime.time时间类型
Intervaldatetime.timedelta时间间隔
Enumstr字符列表
PickleType任意Python对象自动Pickle序列化
LargeBinarystr二进制

常见的 SQLalchemy 列选项

可选参数描述
primary_key如果设置为True,则为该列表的主键
unique如果设置为True,该列不允许相同值
index如果设置为True,为该列创建索引,查询效率会更高
nullable如果设置为True,该列允许为空。如果设置为False,该列不允许空值
default定义该列的默认值

5. 删除、创建数据表

下面的操作将对数据库中的所有表产生影响:

 # 删除旧表:
db.drop_all() 
# 创建新表:
db.create_all() 

6. 数据库的增删改查

1.增
user_A = Myuser(id=123, name='user_A', money=66.66)
user_B = Myuser(id=456, name='user_B', money=888.88)
#在将对象写入数据库之前,先将其添加到会话中(类似缓存)
# 插入单个对象
# db.session.add(user_A)
# 插入多个对象
db.session.add_all([user_A, user_B])
#会话提交到数据库后执行操作
db.session.commit()

结果:
在这里插入图片描述

2. 删
db.session.delete(user_B)
db.session.commit()

结果:
在这里插入图片描述

3. 改
user_A.name = 'somebody'
user_A.money= 999
db.session.add(user_A)
db.session.commit()

结果:
在这里插入图片描述

4. 查
Myuser.query.filter_by(id = 123).first()
Myuser.query.filter_by(name = 'somebody').all()

在这里插入图片描述
常用的SQLAlchemy查询过滤器

过滤器说明
filter()把过滤器添加到原查询上,返回一个新查询
filter_by()把等值过滤器添加到原查询上,返回一个新查询
limit使用指定的值限定原查询返回的结果
offset()偏移原查询返回的结果,返回一个新查询
order_by()根据指定条件对原查询结果进行排序,返回一个新查询
group_by()根据指定条件对原查询结果进行分组,返回一个新查询

常用的SQLAlchemy查询执行器

方法说明
all()以列表形式返回查询的所有结果
first()返回查询的第一个结果,如果未查到,返回None
first_or_404()返回查询的第一个结果,如果未查到,返回404
get()返回指定主键对应的行,如不存在,返回None
get_or_404()返回指定主键对应的行,如不存在,返回404
count()返回查询结果的数量
paginate()返回一个Paginate对象,它包含指定范围内的结果
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值