flask创建数据库连接池

flask创建数据库连接池
在Python中,您可以使用 Flask-SQLAlchemy 这个扩展来创建一个数据库连接池。Flask-SQLAlchemy 是一个用于 Flask 框架的 SQLAlchemy 操作封装,实现了 ORM(Object Relational Mapper)。ORM 主要用于将类与数据库中的表建立映射关系,使得我们可以非常方便地通过操作类来操作数据库。
以下是 SQLAlchemy 的一些关键特点:
- ORM(Object-Relational Mapping):SQLAlchemy 提供了一套完整的 ORM 系统,它可以将数据库表映射为 Python 类,将表中的行映射为这些类的实例,将列映射为实例的属性。通过这种映射,你可以使用面向对象的方式操作数据库,而不必编写 SQL 语句。
- 数据库抽象:SQLAlchemy 提供了一套数据库抽象层,它可以适应多种数据库系统,如 MySQL、PostgreSQL、SQLite 等。通过这个抽象层,你可以使用相同的 API 操作不同的数据库系统。
- SQL 表达式语言:除了 ORM,SQLAlchemy 还提供了一套 SQL 表达式语言,你可以用它来编写 SQL 语句。这个表达式语言提供了比原生 SQL 更高级的抽象,可以更方便地编写复杂的 SQL 语句。
- 连接池和事务管理:SQLAlchemy 提供了一套连接池和事务管理机制,你可以用它来管理和复用数据库连接,处理事务。
在许多 Python web 框架(如 Flask、Pyramid 等)中,SQLAlchemy 都是默认或推荐的数据库操作库。它提供了许多强大的功能,使得数据库操作变得非常方便和高效。
以下是一种创建 Flask-SQLAlchemy 连接池的方式:
- 安装 Flask-SQLAlchemy。如果您还没有安装,可以使用以下命令进行安装:
pip install Flask-SQLAlchemy
- 在你的 Flask 应用中设置 SQLAlchemy 的数据库 URI 和连接池的大小:
from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/db_name'
app.config['SQLALCHEMY_POOL_SIZE'] = 20
db = SQLAlchemy(app)
上述代码中 'mysql://username:password@localhost/db_name' 是你的数据库连接信息,你需要替换为实际的值。SQLALCHEMY_POOL_SIZE 是连接池的大小,你可以根据实际需要设置。
- 使用
db对象进行数据库操作。例如,定义一个模型:
class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True, nullable=False)email = db.Column(db.String(120), unique=True, nullable=False)def __repr__(self):return '<User %r>' % self.username
- 您可以使用
db.session来进行数据库事务,如增删查改等:
user = User(username='test', email='test@example.com')
db.session.add(user)
db.session.commit()
这样就实现了一个 Flask 的 SQLAlchemy 数据库连接池。请注意,如果数据库是 PostgreSQL 或其他类型,需要更改 SQLALCHEMY_DATABASE_URI 中的 'mysql://' 部分。
User模型解释
上述代码中的 User 是一个 SQLAlchemy 的模型,它表示了一个数据库表。在这个例子中,这个表的名称默认是 “user”,并且它有三个字段:id,username 和 email。
class User(db.Model):这一行定义了User类,该类继承自db.Model,所以它具有 SQLAlchemy Model 的所有属性和方法。id = db.Column(db.Integer, primary_key=True)这一行定义了一个名为 “id” 的列。该列的类型是 Integer,并且它被设置为表的主键。username = db.Column(db.String(80), unique=True, nullable=False)这一行定义了一个名为 “username” 的列。该列的类型是 String,长度最大为80。unique=True意味着这个表中的 “username” 必须是唯一的,nullable=False意味着这个列不能为 NULL。email = db.Column(db.String(120), unique=True, nullable=False)这一行定义了一个名为 “email” 的列。这个列的类型是 String,长度最大为120。同样地,unique=True和nullable=False分别表示这个列必须具有唯一值,并且不能为 NULL。def __repr__(self):这是一个魔法方法,当你尝试打印一个User对象时,Python 会调用这个方法。在这个例子中,它将返回一个字符串,如<User 'username'>。
这个 User 模型可以用来操作数据库中的用户表。例如,你可以使用这个模型来查询用户,添加新的用户,或者删除用户。
下面是一个删除用户的例子:
user = User.query.filter_by(username='test').first() # 查询用户名为 'test' 的用户
if user:db.session.delete(user) # 如果用户存在,就删除这个用户db.session.commit() # 提交事务
user = User.query.filter_by(username='test').first():这行代码查询数据库中用户名为 ‘test’ 的用户。filter_by()是一个过滤方法,它返回满足条件的结果。first()是一个查询方法,它返回查询结果的第一项。如果查询结果为空,那么first()将返回None。if user::这个判断语句检查查询结果是否为None。如果user为None,说明数据库中没有用户名为 ‘test’ 的用户,因此我们不能删除它。如果user不是None,说明我们找到了一个用户名为 ‘test’ 的用户,因此我们可以删除它。db.session.delete(user):这行代码删除查询到的用户。delete()方法接受一个 SQLAlchemy 模型的实例作为参数,并将其标记为待删除。db.session.commit():这行代码提交事务,将所有的改动(包括删除操作)保存到数据库。如果你没有调用commit(),那么delete()的改动不会被保存到数据库。
请注意,如果你尝试删除一个不存在的对象,SQLAlchemy 会抛出一个异常。所以在删除之前,你应该检查你的对象是否存在。
补充
虽然这个User类代表了数据库中的一个表,但是并不意味着这个表已经在数据库中创建了。在你第一次操作这个表之前,你需要确保这个表已经在数据库中创建。你可以使用 db.create_all() 方法来自动创建所有的表,或者你也可以手动在数据库中创建这个表:
-
使用
db.create_all()方法。这个方法会自动创建所有定义的但尚未在数据库中存在的表。这个方法通常在 Flask 应用启动时运行一次,例如:from flask import Flask from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/db_name' db = SQLAlchemy(app)class User(db.Model):# ...db.create_all() -
手动在数据库中创建这个表。你可以通过 SQL 语句或者数据库管理工具在数据库中创建这个表。
如果你尝试对一个在数据库中不存在的表进行操作(如查询、添加记录或删除记录),SQLAlchemy 会抛出一个错误。所以在操作表之前,你应该确保这个表已经在数据库中存在。
相关文章:
flask创建数据库连接池
flask创建数据库连接池 在Python中,您可以使用 Flask-SQLAlchemy 这个扩展来创建一个数据库连接池。Flask-SQLAlchemy 是一个用于 Flask 框架的 SQLAlchemy 操作封装,实现了 ORM(Object Relational Mapper)。ORM 主要用于将类与数据库中的表建立映射关系…...
C语言手撕顺序表
目录 一、概念 1、静态顺序表:使用定长数组存储元素。 2、动态顺序表:使用动态开辟的数组存储 二、接口实现 1、对顺序表的初始化 2、对数据的销毁 3、对数据的打印 4、检查是否需要扩容 5、尾插 6、头插 7、尾删 8、头删 9、在pos位置插入x …...
常见的排序算法
常见的排序算法 常见的排序算法包括: 冒泡排序(Bubble Sort):依次比较相邻的元素,将较大的元素交换到右侧,逐步将最大元素移动到末尾。插入排序(Insertion Sort):将数组…...
C#如何使用SQLite数据库?
文章目录 0.引言1.SQLite工具准备2.创建窗体项目并添加SQLite的命名空间3.编写使用SQLite代码4.结果展示 0.引言 SQLite是一个轻量级的嵌入式数据库,它的库文件非常小巧,不需要独立的服务器进程或配置。这使得它非常适合在资源受限的环境中使用ÿ…...
如何将表格中的状态数据转换为Tag标签显示
考虑到系统前端页面的美观程度,通常通过Tag标签来代替某条数据中的状态信息。仅通过一点操作,便能够使得页面美观程度得到较大提升,前后对比如下所示。代码基于Vue以及Element-ui组件实现。 修改前: 修改后: 修改前…...
centos中修改防火墙端口开放配置
1、直接进入文件修改 vim /etc/sysconfig/iptables 2、添加需要开放的端口 (1)添加需要开放的单个端口 4001 -A INPUT -m state --state NEW -m tcp -p tcp --dport 4001 -j ACCEPT (2)添加需要开放的某个网段端口 4001:4020 …...
程序设计 算法基础
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…...
【数据结构】之十分好用的“链表”赶紧学起来!(第一部分单向链表)
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
ubuntu开机自启动
ubuntu开机自启动 1、建一个test.sh脚本,并写入 #!/bin/sh gnome-terminal -x bash -c ‘cd /home/文件路径/;python3 main.py’ exit 0 2、:wq!保存 3、创建rc-local.service文件(sudo vim /etc/systemd/system/rc-local.service)…...
Git将其他分支合并至主分支
主要思想: 把分支代码合并到master,合给谁,就先切换到谁的分支 1. 当前分支是dev,开发完成后,需要合并到master分支 先把该提交的提交,需要push的push完成后,再切换分支。 否则也会告诉你要提交…...
Python+request+pytest 接口自动化测试框架入门(与unittest的比较)
1. Pythonrequestpytest 接口自动化测试框架入门 - 简书 pytest和unittest的比较: pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点: 简单灵活,容易上手支持参数化能够支持简单的单元测试和复杂的功能测试&a…...
数据结构——复杂度
总有一天你要一个人,再暗夜中,向那座桥走过去 文章目录 一、算法的复杂度 考察形式范例 二、算法的时间复杂度 大O的渐进表示法 常见的复杂度对比 例题:消失的数字 题目的三种思路 1.排序遍历 2.减法 3.单身狗思想 三、空间复杂度…...
使用goldengate 迁移Oracle到postgresql
环境: --源端: IP:10.0.4.16 hostname:tencent Oracle数据库版本:12.2.0.1.0 ogg for oracle版本:19.1.0.0.4 SID:orcl --目标端: IP:10.0.4.16 hostname&#…...
ESP-C3入门20. CentOS开发环境及Jenkins流水线
一、准备环境 CentOS8已经正常安装Jenkins 二、升级 cmake cmake 升到 3.16以上。 cmake --version # 安装 g sudo yum install gcc-c export CXXg# 安装 CMake 的依赖项 sudo yum install -y openssl-devel# 下载 CMake 源码并进行编译安装 wget https://github.com/Kitwa…...
服务器被爬虫恶意攻击怎么办?
在有预算的情况可以采购第三方服务防火墙,没钱就使用开源的WAF进行防护。 # WAF防火墙的基本防护原理 WAF(Web 应用防火墙)可以使用多种技术来防止恶意爬虫攻击,例如: 1. 黑名单:WAF 可以使用黑名单技术来…...
JavaScript正则表达式之座机号/手机号验证校验规则
引用:https://www.bilibili.com/read/cv18300539/ 本文对利用正则表达式对手机号码进行了验证 支持格式: 座机 :xxx-xxxxxxxx、xxxxxxxxxxxx …座机区号的横杠可有可无 手机:xxxxxxxxxxx JavaScript: var: checkPhone (rule,…...
黑客学习手册(自学网络安全)
一、首先,什么是黑客? 黑客泛指IT技术主攻渗透窃取攻击技术的电脑高手,现阶段黑客所需要掌握的远远不止这些。 二、为什么要学习黑客技术? 其实,网络信息空间安全已经成为海陆空之外的第四大战场,除了国…...
获取非叶子节点的grad(retain_grad()、hook)【为了解决grad值是None的问题】
在调试过程中, 有时候我们需要对中间变量梯度进行监控, 以确保网络的有效性, 这个时候我们需要打印出非叶节点的梯度, 为了实现这个目的, 我们可以通过两种手段进行, 分别是: retain_grad()hook 不过我感觉“hook”比“retain_grad()”要麻烦.....,所以我感觉还是…...
JMeter(八):响应断言详解
响应断言 :对服务器的响应进行断言校验 (1)应用范围: main sample and sub sample, main sample only , sub-sample only , jmeter variable 关于应用范围,我们大多数勾选“main sample only” 就足够了,因为我们一个请求,实质上只有一个请求。但是当我们发一个请求时,…...
【网络编程】IO复用的应用一:非阻塞connect
在connect连接中,若socket以非阻塞的方式进行连接,则系统内设置的TCP三次握手超时时间为0,所以它不会等待TCP三次握手完成,直接返回,错误为EINPROGRESS。 所以,我们可以通过判断connect时返回的错误码是…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
