欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用Flask来实现mysql的基本操作

程序员文章站 2022-04-19 14:09:59
使用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