• Flask数据库操作-Flask-SQLAlchemy


    Flask中一般使用flask-sqlalchemy来操作数据库。flask-sqlalchemy的使用介绍如下:

    一、SQLAlchemy

    1. SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python
      对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升。
    2. SQLAlchemy是一个关系型数据库框架,支持多种数据库后台。它提供了高层的 ORM 和底层的原生数据库的操作。flask-sqlalchemy
      是一个简化了 SQLAlchemy 操作的flask扩展。

    备注:ORM 全拼Object-Relation Mapping. 称为对象-关系映射主要实现模型对象到关系数据库数据的映射.比如:把数据库表中每条记录映射为一个模型对象

    二、flask-sqlalchemy安装

    1. 安装flask-sqlalchemy : pip install flask-sqlalchemy
    2. 如果连接的是 mysql 数据库,需要安装 flask-mysqldb或者pymysql 驱动。说明:pymysql 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使mysqldb。
    pip install flask-mysqldb  #如果flask-mysqldb安装不上,安装pymysql
    pip install pymysql
    
    • 1
    • 2
    1. 数据库连接设置

    格式:mysql://<用户名>:<密码>@:<端口>/数据库名

    如果安装pymysql ,需要这样连接数据库

    mysql+pymysql://<用户名>:<密码>@:<端口>/数据库名
    
    • 1

    例如:

    # 数据库链接地址
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test'
    # 动态追踪修改设置,如未设置只会提示警告,此字段会增加了大量的开销,建议设置为False
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    #若要查看映射的sql语句,需要如下配置,此功能对调试有用,正式环境建议设置为False
    app.config['SQLALCHEMY_ECHO'] = True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    三、SQLAlchemy常用配置

    1、sqlalchemy配置信息

    在这里插入图片描述
    2、SQLAlchemy字段类型及对应python中类型

    在这里插入图片描述

    备注:如果使用的是mysql数据库,则数据库中字段类型和python中数据类型对应关系

    在这里插入图片描述

    3、常用的SQLAlchemy列选项

    在这里插入图片描述

    4、常用的SQLAlchemy关系选项

    在这里插入图片描述
    四、数据库基本操作

    在Flask-SQLAlchemy中,增删改查操作,均由数据库会话管理。
    会话用 db.session 表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用 db.session.commit() 方法提交会话。提交操作把会话对象全部写入数据库。

    在 Flask-SQLAlchemy 中,查询操作是通过 query 对象操作数据。
    最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。

    1、查询过滤器

    在这里插入图片描述

    2、查询执行器方法

    在这里插入图片描述

    3、filter过滤条件

    在这里插入图片描述

    4、逻辑运算

    在这里插入图片描述

    5、DB操作

    在这里插入图片描述

    五.、完整流程举例

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
     
    app = Flask(__name__)
     
    #设置连接数据库的URL
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test'
     
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    #查询时会显示原始SQL语句
    app.config['SQLALCHEMY_ECHO'] = True
    db = SQLAlchemy(app)
    class Role(db.Model):
        # 定义表名
        __tablename__ = 'roles'
        # 定义列对象
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True)
        us = db.relationship('User', backref='role')
        #repr()方法显示一个可读字符串
        def __repr__(self):
            return 'Role:%s'% self.name
    class User(db.Model):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True, index=True)
        email = db.Column(db.String(64),unique=True)
        password = db.Column(db.String(64))
        role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
        def __repr__(self):
            return 'User:%s'%self.name
    if __name__ == '__main__':
        app.run(debug=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
  • 相关阅读:
    【C++】构造函数和析构函数第二部分(拷贝构造函数)--- 2023.9.28
    【SQL刷题】DAY17----SQL表与索引操作专项练习
    Educational Codeforces Round 154 (Rated for Div. 2)A~C
    若依微服务集成Mybatis-plus详细教程
    如何设计分布式系统-分布式事务-XA?
    云计算———虚拟化技术镜像的构建及Harbor的使用(三)
    东方通部署vue项目
    Spark中把所有的列转换成string操作
    前后端分离前端部署方案是什么?
    SpringMvc+Spring+MyBatis+Maven+Ajax+Json注解开发 利用Maven的依赖导入不使用架包模式 (实操十一)
  • 原文地址:https://blog.csdn.net/baidu_24752135/article/details/126472645