我使用的是aiohttpsqlalchemy,我创建了一个单例,在需要SQLAlchemy实例时可以帮助我连接(代码如下).

12月11日09:35:29 ip xxx xxx xxx gunicorn[16513]:sqlalchemy.exc.StatementError:(sqlalchemy.exc.InvalidRequestError)在回滚无效事务之前无法重新连接[SQL:'…\n从…\n此处…=%(用户名\u 1)s\n限制%(参数\u 1)s'][参数:[{}]```

有没有办法修复当前的代码?

CONNECTION_DETAILS = {
    'driver': 'pymysql',
    'dialect': 'mysql',
    'host': os.environ.get('HOST'),
    'port': 3306,
    'user': 'master',
    'password': os.environ.get('PASSWORD'),
    'database': 'ourdb',
    'charset': 'utf8'
}

_instance = None

def __new__(cls, *args, **kwargs):
    if not cls._instance:
        con_str = '{dialect}+{driver}://{user}:{password}@' \
                  '{host}:{port}/{database}?charset={charset}'\
            .format(**cls.CONNECTION_DETAILS)
        try:
            engine = sqlalchemy.create_engine(con_str)

            Session = scoped_session(sessionmaker(bind=engine))
            session = Session()  # Create the ORM handle
        except sqlalchemy.exc.OperationalError:
            logger.exception('Establishing database connection error.')

        cls._instance = super().__new__(cls)
        logger.debug("Returning database's session.")
        cls._instance.session = session

        # Initializing tables
        cls._instance.Users = Users
        cls._instance.Services = Services
        cls._instance.APIKeys = APIKeys

    return cls._instance

推荐答案

这将是一个相当晚的回答.发生的情况如下:在使用会话时,会引发sqlalchemy错误(当用作纯SQL时也会引发错误的任何内容:语法错误、唯一约束、键冲突等).

你必须找到这个错误,把它包装成try/except块,然后执行session.rollback().

在此之后,您可以恢复会话.

Python-3.x相关问答推荐

如何绘制交叉验证的AUROC并找到最佳阈值?

使用 iloc 或 loc 对多列进行过滤

当我在正则表达式末尾使用斜杠时,为什么会得到不同的结果?

selenium 无法执行网站上最简单的功能

Python 舍入数字不准确

如何将 WebDriver 传输到导入的测试?

无法理解此递归函数的分配和环境用法

通过匹配第一列的行值,逐个单元格地添加两个Pandas 数据框中的浮点数

Python.在循环中填充字典的问题

过滤查询集和Q运算符的不同值

在不使用字符串方法的情况下查找字符串最后一个单词的长度 - Python

如何在 VSCode 的在 Cloud Run Emulator 上运行/调试构建设置中添加 SQL 连接

两个Pandas数据框中的共同列列表

python total_ordering:为什么使用 __lt__ 和 __eq__ 而不是 __le__?

virtualenv virtualenvwrapper virtualenv:错误:无法识别的参数:--no-site-packages

如何在元素列表中找到最大的数字,可能是非唯一的?

tkinter TclError:错误的文件类型使用 askopenfilename

如何等待 create_task() 创建的任务完成?

如何为 Python 3.x 安装 psycopg2?

带有 Emacs 的 Python 3