我有一個端點來從我的數據庫中刪除一個對象。我用下面的代碼刪除: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