sql和python有什么区别_python – SQLAlchemy:flush()和commit()之间有什么区别?

Session对象基本上是对数据库的更改的持续事务(更新,插入,删除)。这些操作不会保留到数据库中,直到它们提交(如果您的程序因某种原因在会话中期事务中中止,则任何未提交的更改都会丢失)。

会话对象使用session.add()注册事务操作,但是在调用session.flush()之前还没有将它们传递到数据库。

session.flush()将一系列操作传递给数据库(插入,更新,删除)。数据库将它们维护为事务中的待处理操作。这些更改不会永久保留到磁盘,或对其他事务可见,直到数据库接收到当前事务的COMMIT(这是session.commit()所执行的操作)。

session.commit()提交(持久)这些更改到数据库。

flush()总是作为对commit()(1)的调用的一部分来调用。

当使用Session对象查询数据库时,查询将返回来自数据库和来自其保存的未提交事务的刷新部分的结果。默认情况下,Session对象自动刷新其操作,但可以禁用。

希望这个例子将使这个更清楚:

#---

s = Session()

s.add(Foo('A')) # The Foo('A') object has been added to the session.

# It has not been committed to the database yet,

# but is returned as part of a query.

print 1, s.query(Foo).all()

s.commit()

#---

s2 = Session()

s2.autoflush = False

s2.add(Foo('B'))

print 2, s2.query(Foo).all() # The Foo('B') object is *not* returned

# as part of this query because it hasn't

# been flushed yet.

s2.flush() # Now, Foo('B') is in the same state as

# Foo('A') was above.

print 3, s2.query(Foo).all()

s2.rollback() # Foo('B') has not been committed, and rolling

# back the session's transaction removes it

# from the session.

print 4, s2.query(Foo).all()

#---

Output:

1 []

2 []

3 [, ]

4 []

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值