我有一个端点来从我的数据库中删除一个对象。我用下面的代码删除:SQLAlchemy在删除后仍然能够从会话中获取对象
my_object = Object.query.get(id)
db.session.delete(my_object)
db.session.commit()
return json.dumps({'success': True}
我有一个API测试,测试,我创建一个对象端点,然后使用端点将其删除。我试图在发生删除后断言它不在数据库中。
my_object = MyObject()
db.session.add(my_object)
db.session.commit()
response = requests.delete('{}/my-object/{}'.format(
os.environ.get('MY_URL'),
my_object.id
))
self.assertTrue(response.json()['success']) // this passes
self.assertEqual(200, response.status_code) // this passes
result = db.session.query(MyObject).get(my_object.id)
print(result.id) // prints the id of the job even though it is deleted from the database
我认为这与某些SQLAlchemy会话缓存有关。我试过db.session.flush()
,db.session.expire_all()
无济于事。该对象实际上是从数据库中删除的。所以我希望查询结果是None
。
我在文档中看到了这一点,但还没有完全包裹我的头。 when to commit and close a session
感谢您的帮助。
您是否曾尝试在查询之前但在删除之后提交?或者,也许开一个新的会议会更清洁。 – 9000
有两个问题可以帮助缩小这个问题:你是否在同一个进程中运行你的服务器?在每次测试之后,您的测试框架是否使用事务将数据库回滚到之前的状态? –
@ 9000我不确定我是否理解第一个问题。我可以尝试打开一个新的会话,看看是否有效。 – brandonbanks