V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
augustrush923
V2EX  ›  程序员

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

  •  
  •   augustrush923 · 264 天前 · 906 次点击
    这是一个创建于 264 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1529 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 17:02 · PVG 01:02 · LAX 09:02 · JFK 12:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.