我有一个项目是 python+fastapi+tortoise orm+mysql 。
数据库连接设置:
app = FastAPI()
TORTOISE_CONFIG = {
'connections': {
# Dict format for connection
'default': {
'engine': 'tortoise.backends.mysql',
'credentials': {
'host': db_host,
'port': db_port,
'user': db_user,
'password': db_pass,
'database': db_name,
}
},
# Using a DB_URL string
# 'default': 'postgres://postgres:qwerty123@localhost:5432/events'
},
'apps': {
'models': {
'models': ['api.news.models', 'aerich.models'],
# If no default_connection specified, defaults to 'default'
'default_connection': 'default',
}
},
'use_tz': False,
'timezone': 'Asia/Shanghai',
'echo': True,
}
register_tortoise(
app=app,
config=settings.TORTOISE_CONFIG,
)
当访问一次数据库时,在 MySQL 中执行show processlist
会出现一条状态为sleep
的连接。当这个连接过期(超过wait_timeout
最大值)会把这个连接清理掉。
当再次访问数据库时,会得到一个报错:ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。
。
我应该如何捕获这个错误,并实现与数据库重新建立连接?
目前这个错误也不会终端程序,会重新建立连接。但我还是想搞清除,在哪里可以捕获这个异常,让后处理它并重新建立连接。
请各位 v 友不吝赐教