当前位置: 首页 > news >正文

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. 数据库连接设置

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

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

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

例如:

# 数据库链接地址
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

三、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 SQLAlchemyapp = 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)
http://www.lryc.cn/news/305993.html

相关文章:

  • H5获取手机相机或相册图片两种方式-Android通过webview传递多张照片给H5
  • mysql进阶学习 | DAY 14
  • 使用GPT生成python图表
  • [深度学习]yolov9+deepsort+pyqt5实现目标追踪
  • C#_WaitAll、WhenAll、async及await
  • leetcode hot100零钱兑换Ⅱ
  • 路由器配置DMZ主机映射
  • ubuntu22.04@Jetson Orin Nano之CSI IMX219安装
  • Kettle下载地址
  • 密码学基本概念
  • 9个最受欢迎的开源自动化测试框架盘点!
  • 高速稳定、网络隔离,解析“向日葵控控”远控方案在医疗行业应用
  • 抖音视频提取软件使用功能|抖音视频下载工具
  • Django入门指南:从环境搭建到模型管理系统的完整教程
  • Elasticsearch从入门到精通-01认识Elasticsearch
  • Element UI的安装和使用
  • c++的指针完整教程
  • WordPress前端如何使用跟后台一样的Dashicons图标字体?
  • redisson实现延迟队列
  • 【教程】N2N V3内网穿透、异地组网,包括Win/Linux/Android,包括不同内网实现adb远程连接
  • JavaAPI常用类01
  • 在 where子句中使用子查询(二)
  • TongWEB(东方通),部署WEB前后端项目步骤
  • Vue中如何使用dayjs
  • 数据库-MySQL
  • C语言每日一题(61)盛最多水的容器
  • uni-app 经验分享,从入门到离职(四)——页面栈以及页面跳转的 API(开发经验总结)
  • Go Module常用命令
  • ubuntu压缩和解压
  • 华为HCIP Datacom H12-831 卷24