我有一个项目是 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 友不吝赐教
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.