python - 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')
我在这里想念什么?