sqlalchemy文档资料翻译(五)

[程序]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')>]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值