首页 > 解决方案 > SQLAlchemy:SQLite 中的回滚事务

问题描述

在将事务提交到 SQLite 数据库后,我应该如何回滚事务?

这是我的玩具代码。我本来希望最后一个打印语句显示一个空列表。

from sqlalchemy import Column, Integer, String, create_engine, select
from sqlalchemy.orm import Session, declarative_base

Base = declarative_base()


class User(Base):
    __tablename__ = "Users"

    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)

    def __repr__(self):
        return f"User(id={self.id!r}, name={self.name!r})"


if __name__ == "__main__":
    engine = create_engine("sqlite+pysqlite:///:memory:", future=True)

    Base.metadata.create_all(bind=engine)

    with Session(engine) as session:

        test_user = User(name="John")

        session.add(test_user)
        session.commit()

        print(f"DB content after commit: {session.execute(select(User)).scalar()}")
        # DB content after commit: User(id=1, name='John')

        session.rollback()  # not working as expected
        print(f"DB content after rollback: {session.execute(select(User)).scalar()}")
        # DB content after rollback: User(id=1, name='John')

我在这里想念什么?

标签: pythonsqlitesqlalchemyrollback

解决方案


推荐阅读