[程序]sqlalchemy文档资料翻译(五) -- 回滚
由于 Session 工作在事务的基础上,因此我们可以回滚我们的改变。让我们创建两个稍后需要撤销的操作; ed_user 的名称变更为 Edwardo:
>>> ed_user.name = 'Edwardo'
接下来我们添加一个错误的用户, fake_user:
>>> fake_user = User('fakeuser', 'Invalid', '12345')
>>> session.add(fake_user)
现在查看 session,我们可以看到他们已经刷新到当前事务中了:
>>> session.query(User).filter(User.name.in_(['Edwardo', 'fakeuser'])).all()
UPDATE users SET name=? WHERE users.id = ?
('Edwardo', 1)
INSERT INTO users (name, fullname, password) VALUES (?, ?, ?)
('fakeuser', 'Invalid', '12345')
SELECT users.id AS users_id, users.name AS users_name, users.fullname AS users_fullname, users.password AS users_password
FROM users
WHERE users.name IN (?, ?)
('Edwardo', 'fakeuser')
[<User('Edwardo','Ed Jones', 'f8s7ccs')>, <User('fakeuser','Invalid', '12345')>]
回滚之,我们可以看到 ed_user 的名称重新变更为 ed, fake_user 则被删除了:
>>> session.rollback()
ROLLBACK
>>> ed_user.name
BEGIN
SELECT users.id AS users_id, users.name AS users_name, users.fullname AS users_fullname, users.password AS users_password
FROM users
WHERE users.id = ?
(1,)
u'ed'
>>> fake_user in session
False
我们通过下面的 SELECT 来描述数据库的变更:
>>> session.query(User).filter(User.name.in_(['ed', 'fakeuser'])).all()
SELECT users.id AS users_id, users.name AS users_name, users.fullname AS users_fullname, users.password AS users_password
FROM users
WHERE users.name IN (?, ?)
('ed', 'fakeuser')
[<User('ed','Ed Jones', 'f8s7ccs')>]