2010-03-10 63 views
1

多線程程序中,Django的get_or_create函數始終導致「get()返回多個模型名稱」錯誤。多線程程序中的Django和「get()返回多個模型名稱」錯誤

我甚至試圖把get_or_create語句放在lock.acquire()和lock.release()塊中,但仍然無法工作。

程序只當我設置THREAD_COUNT = 1

數據庫是InnoDB引擎的工作原理。如何解決這類問題?

回答

2

這不是由多線程引起的,而是因爲數據庫中存在多個對象,這可以滿足您的查詢。您必須使用get從數據庫中選擇一個對象,否則會引發異常。

+0

@gruszczy,如何「使用get從數據庫中選擇一個對象」,get()函數應該只選擇一個對象,但問題是如何防止在上述情況下創建多個對象。 – jack 2010-03-10 14:22:05

+0

您必須創建正確的查詢。最簡單的方法當然是SomeModel.objects.get(pk = 5),因爲這會給你一個命中。但是,也許你可以準備條件,也可以滿足一行。 – gruszczy 2010-03-10 14:38:37