外贸站外推广,网站需求建设书,政务网站建设的方向,wordpress菜单显示选项需求#xff1a; Postgresql数据库服务重启后#xff0c;需要业务代码正常读写数据库 方案#xff1a; 通过继承playhouse.shortcuts.ReconnectMixin和playhouse.pool.PooledPostgresqlDatabase来创建一个新的ReconnectPooledPostgresqlDatabase类修改reconnect_errors属性来…需求 Postgresql数据库服务重启后需要业务代码正常读写数据库 方案 通过继承playhouse.shortcuts.ReconnectMixin和playhouse.pool.PooledPostgresqlDatabase来创建一个新的ReconnectPooledPostgresqlDatabase类修改reconnect_errors属性来适配Postgresql的错误类型使用ReconnectPooledPostgresqlDatabase来获取数据库连接 测试
启动程序 --重起数据库服务–读写数据库操作正常启动应用程序–关闭数据库服务–读写数据库失败–启动数据库服务–读写数据库操作正常
示例
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 Noneclassmethoddef get_database(cls, **kwargs):if cls.__database is None:with cls.__instance_lock:cls.__database PooledPostgresqlDatabase(databasekwargs.get(database),hostkwargs.get(host, 127.0.0.1),portint(kwargs.get(port, 5432)),userkwargs.get(user, postgres),passwordkwargs.get(password, postgres),max_connectionsint(kwargs.get(max_connections, 50)),stale_timeoutint(kwargs.get(stale_timeout, 600)))return cls.__database