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

使用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:[email protected]: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="[email protected]"
    db.session.commit()

更新User表中主键为1的数据,姓名改成li,email改为[email protected]

删除

    user=User.query.get(1)
    db.session.delete(user)
    db.session.commit()

删除主键为1的数据

猜你喜欢

转载自blog.csdn.net/qq_41338249/article/details/85937455