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

Peewee+Postgresql+PooledPostgresqlDatabase重连机制

需求:

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

方案:

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

测试

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

示例:

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

相关文章:

Peewee+Postgresql+PooledPostgresqlDatabase重连机制

需求: Postgresql数据库服务重启后,需要业务代码正常读写数据库 方案: 通过继承playhouse.shortcuts.ReconnectMixin和playhouse.pool.PooledPostgresqlDatabase来创建一个新的ReconnectPooledPostgresqlDatabase类修改reconnect_errors属性来…...

IIS 反向代理模块: URL Rewrite 和 Application Request Routing (ARR)

需要设置iis反向代理的场景其实挺多的。例如websocket、Server Sent Events(SSE) 都需要反向代理。 对于需要临时放公网访问的应用,直接运行127.0.0.1的开发环境,然后通过反向代理访问127.0.0.1就可以了,省去麻烦的iis设置。 IIS 实现反向代…...

企业在选择CRM系统时需要注意哪些问题呼叫系统外呼系统部署搭建

在这个信息技术快速发展的时代,许多企业为了对客户进行有效的管理对CRM系统进行了实施。那么,有人会问了,企业在选择CRM系统是需要注意哪些问题呢?我们一起来看看 业务需求匹配:系统功能是否与企业当前及未来的需求相符&#xff…...

数据库水平分表方案

数据库分表有很多策略,如下: 数据库分表是处理大型数据库中数据量过大的一种常见策略,它可以提高查询性能、减少锁竞争、降低维护成本等。以下是一些常见的数据库分表方案: 1. **垂直分表(Vertical Partitioning&…...

MySQL表操作及约束

修改表 重命名: mysql> alter table user1 rename to user; 新增一列 mysql> alter table user add image_path varchar(128) comment 路径 after birthday; mysql> alter table user add image_path varchar(128) comment 路径 after birthday; Query…...

Redis 键值对操作全攻略

文章目录 一 . get 和 set二 . keys *三 . exists四 . del五 . expire六 . ttl七 . Redis 的 key 的过期策略八 . 定时器的实现8.1 基于优先级队列8.2 基于时间轮实现的定时器 九 . type十 . 数据库管理相关命令 Hello , 大家好 , 这个专栏给大家带来的是 Redis 系列 ! 本篇文章…...

【C语言】---- return的作用

return 是C语言中的一个关键字,用于从函数中返回值。它有以下几个作用: 1 返回值 return 用于将函数的结果返回给调用者。在函数执行过程中,当遇到 return 语句时,函数将立即停止执行,并将其后的表达式的值作为函数的…...

如何制作新生资料收集系统?

新学年伊始,学校需要高效收集学生信息和证件照。易查分提供了一个便捷的解决方案,通过创建一个集成信息和图片的收集系统,可以快速完成这项工作,并将信息导出为PDF,方便打印和存档。 制作步骤如下: 1. 准备…...

pyecharts可视化数据大屏

1. 简介 1.1. 概述 PyECharts 是一个用于生成 ECharts 图表的 Python 库。ECharts 是一款由阿里巴巴开发的开源 JavaScript 图表库,广泛应用于网页端的数据可视化。而 PyECharts 将 ECharts 的功能带到了 Python 环境中,使得 Python 开发者可以方便地在数据分析、机器学习等…...

uniapp - H5 在 UC 浏览器中返回上一页失效的解决方案

1. 前言 最近使用 uniapp 开发的 H5 在测试中遇到的问题:有A、B两个页面,反复从A页面进入B页面后,在B页面会存在返回函数失效问题。经过测试发现,如果反复进入B页面的参数相同,在第三次进入后,返回就会失效,不管是 uniapp 自带的头部导航,还是 uni.navigateBack API 都…...

利用KMeans重新计算自己数据集的anchor

在YOLOv5或YOLOv7中,anchors(锚框)是预设的一组不同大小、不同长宽比的边界框,它们用于在图像中的每个网格单元上进行偏移和缩放,以生成目标的候选框。这些anchors的设定对于提高目标检测的效率和准确性至关重要。 并…...

分类任务实现模型集成代码模版

分类任务实现模型(投票式)集成代码模版 简介 本实验使用上一博客的深度学习分类模型训练代码模板-CSDN博客,自定义投票式集成,手动实现模型集成(投票法)的代码。最后通过tensorboard进行可视化&#xff0…...

从Milvus迁移DashVector

本文档演示如何从Milvus将Collection数据全量导出,并适配迁移至DashVector。方案的主要流程包括: 首先,升级Milvus版本,目前Milvus只有在最新版本(v.2.3.x)中支持全量导出其次,将Milvus Collection的Schema信息和数据…...

彻底改变计算机视觉的 Vision Transformer (ViT) 综合指南(视觉转换器终极指南)

欢迎来到雲闪世界。大家好!对于那些还不认识我的人,我叫 Francois,我是 Meta 的研究科学家。我热衷于解释先进的 AI 概念并使其更容易理解。 今天,让我们深入探讨计算机视觉领域最重要的贡献之一:Vision Transformer&…...

vue3 v-bind=“$attrs“ 的一些理解,透传 Attributes相关说明及事例说明

1、可能小伙伴们经常会在自己的项目中看到v-bind"$attrs"&#xff0c;这个一般是在自定义组件中看到。 比如&#xff1a; <template><BasicModalv-bind"$attrs"register"registerModal":title"getTitle"ok"handleSubm…...

鸿蒙开发基础知识-页面布局【第四篇】

1.类型转换 2.交互点击事件 3.状态管理 4.forEch渲染和右上角图标 测试案例 Stack 层叠布局一个生肖卡 5. 动画展示图片 6. Swiper 轮播组件的基本使用 图片等比显示 aspectRatio&#xff08;&#xff09;...

用CSS实现前端响应式布局

一、响应式布局的重要性 随着移动设备的普及&#xff0c;越来越多的用户通过手机、平板电脑等设备访问网页。如果网页不能适应不同的屏幕尺寸&#xff0c;就会出现布局混乱、内容显示不全等问题&#xff0c;严重影响用户体验。响应式布局可以确保网页在各种设备上都能保持美观…...

【docker】docker启动sqlserver

sqlserver-docker官方地址 # sqlserver不是从docker的中央仓库拉取的&#xff0c;而是从ms的仓库拉取的。 docker pull mcr.microsoft.com/mssql/server:2019-latest# 宿主机即docker程序运行的linux服务器 docker run -d \ --user root \ --name mssql2019 \ -e "ACCEPT…...

Python爬虫01

requests模块 文档 安装 pip/pip3 install requestsresponse.text 和 response.content的区别 1.response.text 等价于 response.content.decode("推测出的编码字符集")response.text 类型&#xff1a;str 编码类型&#xff1a;requests模块自动根据Http头部对…...

关于vue项目启动报错Error: error:0308010C:digital envelope routines::unsupported

周五啦&#xff0c;总结一下这周遇到的个别问题吧&#xff0c;就是关于启动项目的时候其他的东西都准备好了&#xff0c;执行命令后报错Error: error:0308010C:digital envelope routines::unsupported 这里看一下我标注的地方&#xff0c;然后总结一下就不难发现问题所在 查看…...

模糊PID vs 传统PID:在Simulink里调直流电机,哪个响应更快更稳?

模糊PID与传统PID的Simulink对决&#xff1a;直流电机控制性能深度评测 在工业自动化和机器人控制领域&#xff0c;直流电机的精准控制一直是工程师们关注的重点。面对日益复杂的控制需求&#xff0c;传统PID控制器虽然简单可靠&#xff0c;但在非线性、时变系统中表现往往不尽…...

Qwen3.5-9B-AWQ-4bit赋能Android Studio:移动端AI功能原型开发

Qwen3.5-9B-AWQ-4bit赋能Android Studio&#xff1a;移动端AI功能原型开发 1. 移动端AI开发的新机遇 最近在Android开发社区里&#xff0c;越来越多的开发者开始尝试将大模型能力集成到移动应用中。Qwen3.5-9B-AWQ-4bit模型的出现&#xff0c;为移动端AI功能开发带来了新的可…...

Free RTOS:任务状态,任务管理与调度理论

目录 1.任务状态 1.1 FreeRTOS的任务状态&#xff1a; 1.2 阻塞状态(Blocked) 1.3 暂停状态(Suspended) 原型如下&#xff1a; 1.4 就绪状态(Ready) 1.5 完整的状态转换图 1.6 代码 2.任务管理与调度理论 2.1 调度 2.2 FreeRTOS调度 STM32CubeMX FreeRTOS源码 代…...

python基于智能推荐算法的全屋定制平台网站设计_07y1pcxm

前言随着人们对家居环境品质的追求不断提高&#xff0c;全屋定制平台应运而生。本文介绍的基于智能推荐算法的全屋定制平台网站设计&#xff0c;旨在为用户提供一站式的家居定制解决方案。采用 Python 语言结合 Django 框架进行开发&#xff0c;以 MySQL 数据库作为数据存储核心…...

基于三维空间智能体(3D Spatial Agent)的目标连续感知与主动控制技术体系研究与应用:二轮追问反杀清单(最狠10问)

Q1&#xff08;致命质疑&#xff09;&#xff1a; 你这个方案听起来很先进&#xff0c;但是不是“过度设计”&#xff1f;实际真的有必要做到空间级吗&#xff1f; &#x1f525;回答&#xff1a; 如果只是做“看见”&#xff0c;确实不需要。 但只要进入公共安全、应急调度…...

OpenClaw技能开发入门:为SecGPT-14B编写自定义漏洞检测模块

OpenClaw技能开发入门&#xff1a;为SecGPT-14B编写自定义漏洞检测模块 1. 为什么需要自定义漏洞检测技能 去年在一次内部红队演练中&#xff0c;我遇到了一个典型问题&#xff1a;现有扫描工具对新型API漏洞的检测覆盖率不足&#xff0c;而手动验证每个可疑端点又极其耗时。…...

告别重复劳动:用快马平台智能整合opencode,打造专属效率工具库

作为一名经常需要处理各种数据格式和工具函数的开发者&#xff0c;我最近发现了一个能显著提升开发效率的方法——利用InsCode(快马)平台快速生成可复用的工具库。今天就来分享下如何用这个平台智能整合opencode资源&#xff0c;打造自己的JavaScript效率工具库。 为什么需要工…...

STM32开发库对比:寄存器、SPL、HAL与LL深度解析

1. STM32开发库全景解析&#xff1a;从寄存器到HAL/LL的深度对比从事嵌入式开发这些年&#xff0c;我见证了STM32生态系统的快速演进。记得刚接触STM32F103时&#xff0c;标准外设库还是主流选择&#xff0c;如今Cube生态已成标配。本文将结合我的实际项目经验&#xff0c;详细…...

现代Qt开发——入门 · 环境搭建 · 00 · Qt6 安装踩坑指南

现代Qt开发——入门 环境搭建 00 Qt6 安装踩坑指南 相关仓库仍然已经开源&#xff0c;正在积极火热的建设之中&#xff0c;欢迎各位大佬提Issue和PR&#xff01; 链接地址&#xff1a;https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeQt 1. 前言&…...

ESP32实战:5分钟搞定CAN通信,从硬件连接到数据收发(附代码)

ESP32实战&#xff1a;5分钟搞定CAN通信&#xff0c;从硬件连接到数据收发&#xff08;附代码&#xff09; 当你第一次拿到ESP32开发板时&#xff0c;可能已经尝试过Wi-Fi或蓝牙通信&#xff0c;但你是否知道这颗小小的芯片还能轻松实现工业级的CAN总线通信&#xff1f;CAN总线…...