Sqlalchemy在Flusherror之后不回头



我正在为链接到MySQL db的REST API编写一些测试在JSON中缺少并验证它是否失败,并且不会在数据库中插入任何内容。它过去与sqlite一起工作正常,但是我切换到mysqldb,现在我得到了一个flusherror(而不是我用来捕获的完整性eRror(,当我尝试在错误后试图回滚时,它不会丢任何错误,但该条目已进入带有主键集的数据库为"。代码看起来像这样:

    session = Session()
    try:
        res = func(*args, session=session, **kwargs)
        session.commit()
    except sqlalchemy.exc.SQLAlchemyError as e:
        session.rollback()
        return abort(422)
    else:
        return res
    finally:
        session.close()

这是我在尝试/以外的错误:

class'sqlalchemy.orm.orm.exc.flusherror':实例具有无效的身份密钥。如果这是自动生成的值,请检查数据库表是否允许生成新的主键值,并将映射的列对象配置为期望这些生成的值。还要确保此flush((不会在不适当的时间发生,例如在load((事件中。

我只是阅读了有关SQLalchemy会话和回滚功能的文档,但不明白为什么回滚对我不起作用,因为这几乎是文档中的教科书示例。

我使用Python 2.7.13,Werkzeug'0.12.2',sqlalchemy'1.1.13'和mysqldb'1.2.3'和mysql ver 14.14 distrib.1.1.73!

感谢您的帮助

看来问题仅是mysql:默认情况下,严格模式未激活,允许插入/更新错误以在数据库(WTF?(中进行更改,解决方案是更改SQL_MODE,在全球范围内更改SQL_MODE:mysql:设置sql_mode永久

或Sqlalchemy,如此博客文章中所述:https://www.enricozini.org/blog/2012/tips/sa-sqlmode-traditional/

相关内容

最新更新