Peewee+Postgresql+PooledPostgresqlDatabase重连机制

news/2024/9/18 14:51:16/ 标签: python, postgresql

需求:

Postgresql数据库服务重启后,需要业务代码正常读写数据库

方案:

  1. 通过继承playhouse.shortcuts.ReconnectMixin和playhouse.pool.PooledPostgresqlDatabase来创建一个新的ReconnectPooledPostgresqlDatabase类
  2. 修改reconnect_errors属性来适配Postgresql的错误类型
  3. 使用ReconnectPooledPostgresqlDatabase来获取数据库连接

测试

  1. 启动程序 -->重起数据库服务–>读写数据库操作正常
  2. 启动应用程序–>关闭数据库服务–>读写数据库失败–>启动数据库服务–>读写数据库操作正常

示例:

python">from playhouse.pool import PooledPostgresqlDatabase
from peewee import OperationalError, InterfaceError
from playhouse.shortcuts import ReconnectMixinclass ReconnectPooledPostgresqlDatabase(ReconnectMixin, PooledPostgresqlDatabase):"""支持重连机制的数据库连接池类,可以通过扩展reconnect_errors来支持重连场景"""reconnect_errors = (# Postgres error examples:(OperationalError, 'terminat'),(InterfaceError, 'connection already closed'))class PostgresqlManager(object):"""PG数据库管理类"""__instance_lock = threading.Lock()__database = None@classmethoddef get_database(cls, **kwargs):if cls.__database is None:with cls.__instance_lock:cls.__database = PooledPostgresqlDatabase(database=kwargs.get("database"),host=kwargs.get("host", "127.0.0.1"),port=int(kwargs.get("port", 5432)),user=kwargs.get("user", "postgres"),password=kwargs.get("password", "postgres"),max_connections=int(kwargs.get("max_connections", 50)),stale_timeout=int(kwargs.get("stale_timeout", 600)))return cls.__database

http://www.ppmy.cn/news/1524518.html

相关文章

何时空仓库

某仓库现存货物 s 箱,每天上午出货 m 箱、下午进货 n 箱,若s≥m>n≥0,则第 k 天将会出现空仓的情况。请你帮仓库管理员编写程序,输入s、m 和 n,计算并输出 k。 输入格式 s,m,n (s≥m>n≥0) 输出格式 k 输入样例…

【网易低代码】第2课,页面表格查询功能

你好! 这是一个新课程 CodeWave网易低代码 通过自然语言交互式智能编程,同时利用机器学 习,帮助低代码开发者进一步降低使用门槛、提高应用开发效率 【网易低代码】第2课,页面表格查询功能 1.拖拽表格组件到页面布局中2.服务端逻辑…

5G毫米波阵列天线仿真——CDF计算(方法一)

累计分布函数(CDF)在统计学上是一个由0增长到1的曲线。5G中CDF被3GPP标准推荐使用,5G 天线阵的有效全向辐射功率EIRP的CDF函数被用来评价设备的质量和性能。由于EIRP是在某一个方向角theta, phi上的辐射功率,幅值由天线增益与激励…

Vue.js 中的 DOM 更新之后执行某些操作(如 $nextTick)

Vue.js 中的 DOM 更新之后执行某些操作(如 $nextTick) 引言 在构建动态Web应用时,尤其是在使用Vue.js这样的现代前端框架时,我们经常需要根据组件的状态变化来更新DOM。Vue.js是一个声明式的框架,它能够自动追踪依赖…

高德地图绘图,点标记,并计算中心点

效果图 代码如下 / 地图初始化 const map: any ref(null) const marker: any ref(null) const polyEditor: any ref(null) const view: any ref(false) const squareVertices: any ref([]) const init () > {workSpacesCurrent(workspaceId, {}).then((res) > {c…

界面控件KendoReact中文教程 - 如何创建动态进度条?

Kendo UI致力于新的开发,来满足不断变化的需求。现在我们非常自豪地宣布,通过React框架的Kendo UI JavaScript封装来支持React Javascript框架。Kendo UI for React能够为客户提供更好的用户体验,并且能够更快地构建更好的应用程序。 KendoR…

Spring 源码解读:手动实现BeanFactory的加载与管理

引言 BeanFactory是Spring框架的核心接口之一,它负责管理Bean的创建、加载与依赖注入。通过BeanFactory,开发者可以高效地管理Bean的生命周期,并在应用程序中灵活运用依赖注入机制。本篇文章将通过手动实现一个简单的BeanFactory&#xff0c…

SprinBoot+Vue农产品电商平台的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

JavaScript web API part2

web API 全选反选案例 需求&#xff1a; 勾选大复选框&#xff0c;勾选全部小复选框取消勾选大复选框&#xff0c;则取消勾选全部小复选框若有小复选框没有被勾选&#xff0c;则大复选框不被勾选若所有小复选框都被勾选&#xff0c;则大复选框被勾选 <!DOCTYPE html>…

linux中vim实用命令大全

感谢浪浪云支持发布 浪浪云活动链接 &#xff1a;https://langlangy.cn/?i8afa52 文章目录 1. 快速保存和退出2. 局部替换替换当前行中的文本替换当前行中的所有匹配替换整个文件中的内容确认替换 3. 高效删除和复制删除命令复制命令粘贴命令 4. 快速移动行内移动屏幕内移动文…

虚幻5|不同骨骼受到不同伤害|小知识(2)

1.蓝图创建一个结构&#xff0c;B_BoneDamage 结构里添加一个浮点变量&#xff0c;表示伤害倍数 2.当我们创建了一个结构&#xff0c;就需要创建一个数据表格&#xff0c;数据表格可以选择对应的结构 不同骨骼不同倍数伤害&#xff0c;骨骼要对应骨骼网格体的名称 3.把我们br…

timm从本地加载预训练模型

想要从timm加载本地预训练模型&#xff0c;首先是参考timm.create_model()从本地加载pretrained模型 将 model timm.create_model(modelxxx, pretrainedTrue, xxx)改为 pretrained_cfg timm.models.create_model("modelxxx").default_cfg pretrained_cfg[file] …

SFC CSS 功能:深层选择/插槽选择器/动态绑定

深层选择器​ 如果您希望样式中的选择器scoped“深入”&#xff0c;即影响子组件&#xff0c;则可以使用:deep()伪类&#xff1a; <style scoped> .a :deep(.b) {/* ... */ } </style> 以上内容将被编译为&#xff1a; .a[data-v-f3f3eg9] .b {/* ... */ }提示 创…

飞利浦的精益转型之路:从传统制造到智能制造的华丽蜕变

飞利浦作为一家拥有百年历史的全球知名品牌&#xff0c;其在精益转型方面的经验值得我们深入研究和借鉴。本文将从飞利浦的转型背景、转型过程、转型成效以及给我们的启示等方面&#xff0c;探讨飞利浦如何成功实现精益转型&#xff0c;从而在新的市场竞争中脱颖而出。 一、转型…

Spring-Bean 生命周期

Spring 是一个强大的 Java 框架&#xff0c;广泛应用于企业级应用开发中。Spring 框架的核心是它的依赖注入机制&#xff08;DI&#xff09;&#xff0c;而 Bean 是 DI 的基本单位。在 Spring 中&#xff0c;Bean 的生命周期从创建到销毁&#xff0c;涉及多个阶段和机制 一、S…

【Vue】状态管理模式Vuex

数据共享 流程搭建变更状态辅助函数分割模块 流程 Vuex是一个Vue的状态管理工具&#xff0c;状态就是数据&#xff08;某个状态在很多个组件来使用 &#xff0c;多个组件共同维护一份数据&#xff09; 搭建 1&#xff09;Vuex我们在脚手架搭建项目的时候直接搭建好了&#xff0…

Axios 掌握现代 Web 开发的 HTTP 客户端

Axios: 掌握现代 Web 开发的 HTTP 客户端 在现代 Web 开发中&#xff0c;与后端进行数据交互是不可或缺的一部分。Axios 是一个流行的基于 Promise 的 HTTP 客户端&#xff0c;它提供了一种简洁、高效的方式来发送异步请求。本文将引导初学者学会使用 Axios&#xff0c;并探讨…

Qt实现登录界面

本文基于Qt实现一个简单的登录界面&#xff0c;主要使用到Widget、button、edit等控件&#xff0c;基于自定义的信号槽实现界面的跳转&#xff0c;使用绘图设备添加背景图等。 1. 创建主界面 设计主界面的样式&#xff0c;并添加相关的控件。如下显示&#xff1a; 代码如下&…

python如何把数据导出生成pdf?

文章目录 前言介绍多种生成PDF的方法一、使用reportlab二、使用FPDF三、使用Pandas与pdfkit总结 前言介绍多种生成PDF的方法 在Python中&#xff0c;将数据导出并生成PDF文件&#xff0c;你可以使用多种库来实现&#xff0c;其中比较流行的有reportlab和FPDF&#xff08;针对简…

JavaScript中的控制流语句:break、continue、return、throw

在JavaScript编程中&#xff0c;控制流语句是控制代码执行流程的重要工具。这些语句包括break、continue、return和throw&#xff0c;它们可以在循环、函数以及其他代码块中使用&#xff0c;以改变正常的执行顺序。下面我们将逐一探讨这些语句的用途和示例。 break break语句…