在 fastapi+tortoise orm 去请求 MySQL 时遇到一些问题

263 天前
 augustrush923

我有一个项目是 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 友不吝赐教

904 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1028189

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX