【发布时间】:2018-02-22 04:14:42
【问题描述】:
我是 sql-alchemy 的新手,并试图了解在以下情况下会发生什么:
假设我有以下代码:
with db.mysession() as session:
first_obj = session.query(db.my_table).filter(db.obj.index == 1)
second_obj = session.query(db.my_table).filter(db.obj.index == 2)
first_obj.delete()
# note this was not commited to the db and I'm creating a new session
session = db.mysession()
second_obj_2 = session.query(db.my_table).filter(db.obj.index == 2)
second_obj_2 = "some_change"
mysession() 只是打开和 sqlalchemy 会话到数据库并在退出时关闭它。
- 问题是会发生什么?被删除的对象是否真的被删除了?还是不是因为会话被覆盖?
- 这两个会话之间有什么区别吗?在这段代码的末尾我会看到哪些变化?
- 我没有故意关闭内部会话,未关闭的会话会怎样?
【问题讨论】:
-
上下文处理仍然看到原始会话,所以这取决于你的上下文处理程序做什么。
-
在这种情况下默认的上下文处理程序会做什么?
-
问题是:
mysession是什么? -
不,问题如下:在这段代码的末尾,哪些更改保存到数据库,哪些不保存?为什么?
-
要回答这个问题,您必须提供
mysession是什么以及做什么。 (对delete()调用感到困惑,但注意到您只使用查询对象)。
标签: python python-2.7 orm sqlalchemy