【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类型 描述
Integer int 常规整形,通常为32位
SmallInteger int 短整形,通常为16位
BigInteger int 或 long 精度不受限整形
Float float 浮点数
Numeric decimal.Decimal 定点数
String str 可变长度字符串
Text str 可变长度字符串,适合大量文本
Unicode unicode 可变长度Unicode字符串
Boolean bool 布尔型
Date datetime.date 日期类型
Time datetime.time 时间类型
Interval datetime.timedelta 时间间隔
Enum str 字符列表
PickleType 任意Python对象 自动Pickle序列化
LargeBinary str 二进制

常见的 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对象,它包含指定范围内的结果

猜你喜欢

转载自blog.csdn.net/qq_40039731/article/details/124675704