当前位置: 首页 > 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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数据结构————栈、队列
  • Uniapp基础学习(二)
  • Anchor Alignment Metric来优化目标检测的标签分配和损失函数。
  • [数据集][目标检测]西红柿成熟度检测数据集VOC+YOLO格式3241张5类别
  • Ubuntu 修改IP
  • 发烧时眼睛胀痛的多种原因
  • 基于Netty框架的桩直连协议(云快充协议1.5)
  • C++相关概念和易错语法(32)(单例模式、类型转换)
  • leetcode:516 最长回文字序列 动态规划
  • C++基础(7.Stack_Quene_List)
  • Windows10上Nginx如何通过自签名证书方式发布Https服务(上)
  • 第二百一十四节 Java反射 - Java反射字段访问
  • DAY69
  • Gartner《2024中国安全技术成熟度曲线》AI安全助手代表性产品:开发者安全助手D10
  • 启动 Spring Boot 项目时指定特定的 application.yml 文件位置
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 08.Android之View事件问题
  • Android框架之Volley
  • angular组件开发
  • cookie和session
  • C语言笔记(第一章:C语言编程)
  • echarts花样作死的坑
  • eclipse(luna)创建web工程
  • EventListener原理
  • Java超时控制的实现
  • mockjs让前端开发独立于后端
  • PHP的类修饰符与访问修饰符
  • Xmanager 远程桌面 CentOS 7
  • 初识 webpack
  • 目录与文件属性:编写ls
  • 前端面试之闭包
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 使用docker-compose进行多节点部署
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 我的面试准备过程--容器(更新中)
  • 我的业余项目总结
  • 找一份好的前端工作,起点很重要
  • gunicorn工作原理
  • Semaphore
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​TypeScript都不会用,也敢说会前端?
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • #android不同版本废弃api,新api。
  • #pragma once与条件编译
  • #图像处理
  • %@ page import=%的用法
  • (3)选择元素——(17)练习(Exercises)
  • (TOJ2804)Even? Odd?
  • (动态规划)5. 最长回文子串 java解决
  • (二)c52学习之旅-简单了解单片机
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (规划)24届春招和25届暑假实习路线准备规划
  • (九)One-Wire总线-DS18B20
  • (转)JAVA中的堆栈