使用Flask来实现mysql的基本操作
程序员文章站
2024-01-09 16:40:16
使用SQLAlchemy操作数据库为了简化数据库操作,我们将使用SQLAlchemy一个数据库工具(ORM,即对象关系映射)。借助SQLAlchemy,你可以通过定义Python类来表示数据库里的一张表(类属性表示表中的字段/列),通过对这个类进行各种操作来代替写SQL语句。这个列我们称之为模型类,类中的属性我们将称之为字段。Flask有大量的第三方扩展,这些扩展可以简化和第三方库的集成工......
使用SQLAlchemy操作数据库
为了简化数据库操作,我们将使用SQLAlchemy一个数据库工具(ORM,即对象关系映射)。借助SQLAlchemy,你可以通过定义Python类来表示数据库里的一张表(类属性表示表中的字段/列),通过对这个类进行各种操作来代替写SQL语句。这个列我们称之为模型类,类中的属性我们将称之为字段。
Flask有大量的第三方扩展,这些扩展可以简化和第三方库的集成工作。
首先我们要“初始化”操作。导入扩展类,实例化并传入Flask程序实例:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app=Flask(__name__)
db=SQLAlchemy(app)
配置参数
class Config(object):
"""配置参数"""
#sqlalchemy的配置参数
SQLALCHEMY_DATABASE_URI="mysql://root:123456@127.0.0.1:3306/db_python04"
#设置sqlalchemy自动跟踪数据库
SQLALCHEMY_TRACK_MODIFICATIONS=True
app.config.from_object(Config)
SQLALCHEMY_DATABASE_URL的组成为:数据库类型名称://数据库用户名名称:密码@地址:端口/数据库名称
告诉数据库的连接地址
创建数据库模型
class Role(db.Model):
"""用户角色/身份表"""
__tablename__="tbl_roles"
id=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String(32),unique=True)
users=db.relationship("User",backref="role")
class User(db.Model):
"""用户表"""
__tablename__="tbl_users" #指明数据库表名
id=db.Column(db.Integer,primary_key=True) #主键 整型的主键默认设置为自增
name=db.Column(db.String(64),unique=True) #唯一性
email=db.Column(db.String(128),unique=True)
password=db.Column(db.String(128))
role_id=db.Column(db.Integer,db.ForeignKey("tbl_roles.id")) #外键字段
模型类的编写的限制:
- 模型类要声明继承db.Model
- 每一个类属性(字段)都要实例化db.Column,传入的参数为字段类型
- 在
db.Column()
中添加额外的选项(参数)可以对字段进行设置。比如,primary_key
设置当前字段是否为主键。除此之外,常用的选项还有nullable
(布尔值,是否允许为空值)、index
(布尔值,是否设置索引)、unique
(布尔值,是否允许重复值)、default
(设置默认值)等。
常用的字段类型如下所示:
- db.Interger 整型
- db.String(size) 字符串 ,size为最大长度
- db.text() 文本类型
- db.float() 浮点型
- d.boolean() 布尔型
创建数据库表
#使用drop_all清除数据库中的所有数据
db.drop_all()
#创建所有的表
db.create_all()
db.drop_all()删除之前创建过的所有数据
db.create_all()创建所有的表
创建
role1=Role(name="admin")
#session记录对象任务
db.session.add(role1)
#提交任务到数据库中
db.session.commit()
最后一行 db.session.commit()
很重要,只有调用了这一行才会真正把记录提交进数据库,前面的 db.session.add()
调用是将改动添加进数据库会话(一个临时区域)中。
读取
通过对模型类的query属性调用可选的过滤方法,我们就可以获取到单个或多个记录(记录以模型类的实例表示)。查询语句如下:
<模型类>.query.<过滤方法(可选)>.<查询方法>
下面是一些常用的过滤方法:
- filter():使用指定的规则过滤记录,返回新产生的查询对象
- filter_by():使用指定规则过滤记录(以关键字表达式的形式),返回新产生的查询对象
- order_by():根据指定条件对记录进行排序,返回新产生的查询对象
- group_by():根据指定条件对记录进行分组,返回新的查询对象
下面是一些常用的查询方法:
- all():返回包含所有查询记录的列表
- first():返回查询的第一条记录,如果未找到,则返回None
- get(id):传入主键值作为参数,返回指定主键值的记录,如果未找到,则返回None
- count():返回查询结果的数量
- first_or_404():返回查询的第一条记录,如果未找到,则返回404错误响应
- get_or_404(id):传入主键值作为参数,返回指定主键值的记录,如果未找到,则返回404错误响应
- paginate():返回一个Pagination对象,可以对记录进行分页处理
更新
user=User.query.get(1)
user.name="li"
user.email="li@163.com"
db.session.commit()
更新User表中主键为1的数据,姓名改成li,email改为li@163.com
删除
user=User.query.get(1)
db.session.delete(user)
db.session.commit()
删除主键为1的数据
本文地址:https://blog.csdn.net/qq_41338249/article/details/85937455