当前位置: 首页 > 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
http://www.lryc.cn/news/431718.html

相关文章:

  • IIS 反向代理模块: URL Rewrite 和 Application Request Routing (ARR)
  • 企业在选择CRM系统时需要注意哪些问题呼叫系统外呼系统部署搭建
  • 数据库水平分表方案
  • MySQL表操作及约束
  • Redis 键值对操作全攻略
  • 【C语言】---- return的作用
  • 如何制作新生资料收集系统?
  • pyecharts可视化数据大屏
  • uniapp - H5 在 UC 浏览器中返回上一页失效的解决方案
  • 利用KMeans重新计算自己数据集的anchor
  • 分类任务实现模型集成代码模版
  • 从Milvus迁移DashVector
  • 彻底改变计算机视觉的 Vision Transformer (ViT) 综合指南(视觉转换器终极指南)
  • vue3 v-bind=“$attrs“ 的一些理解,透传 Attributes相关说明及事例说明
  • 鸿蒙开发基础知识-页面布局【第四篇】
  • 用CSS实现前端响应式布局
  • 【docker】docker启动sqlserver
  • Python爬虫01
  • 关于vue项目启动报错Error: error:0308010C:digital envelope routines::unsupported
  • 随笔1:数学建模与数值计算
  • SDN架构详解
  • platform框架
  • 零成本搞定静态博客——十分钟安装hugo与主题
  • windows C++ 并行编程-转换使用取消的 OpenMP 循环以使用并发运行时
  • 经验笔记:跨站脚本攻击(Cross-Site Scripting,简称XSS)
  • 演示:基于WPF的DrawingVisual和谷歌地图瓦片开发的地图(完全独立不依赖第三方库)
  • 【C++】static作用总结
  • 视频提取字幕的软件有哪些?高效转录用这些
  • (4)SVG-path中的椭圆弧A(绝对)或a(相对)
  • docker国内镜像源报错解决方案