2012-06-27 97 views
0

我有這樣的代碼:與主鍵字段中選擇行= NULL

object_id = request.POST.get('id') 
try: 
    object = request.user.object_set.get(id=object_id, flag=False) 
except Object.DoesNotExist: 
    object = None 

我想如果object_id == None,我總是會得到object == None。但不是!當object_id是無我從DB獲得一些object!我用遠程調試,並檢查,我第一次評估request.user.object_set.get(id=object_id, flag=False)我得到了對象實例,第二次評估這段代碼我得到了DoesNotExist異常。

我重寫了這段代碼,明確地檢查了object_id,然後才讓DB獲取對象。我只是好奇 - 爲什麼會發生這種情況?一些緩存問題?另外小記事本 - 它在本地計算機(Windows 7)上按預期工作,它不能只在服務器(CentOS)上運行,而是在同一版本的Python/Django上運行。

+0

檢查有什麼樣的主鍵,此記錄數據庫。也許None沒有正確映射到NULL,但是是0或「None」或類似的字樣。主鍵字段 – Thilo

+0

不能爲空。如果你談論的表是空的,那麼它也不會返回任何行。如果你想要選擇任何值爲NULL的行,那麼你需要使用'value is NULL'。你不能使用'value = NULL'.Hope這有幫助。 – vijay

+0

感謝您的建議。表格不是空的,所有ID都是正整數(1..30)。我看着SQL,它是「WHERE ID IS NULL」 - 看起來正確。我認爲它可以只與Django連接...... – demalexx

回答

1

也許您的發佈數據未按預期發送。在運行python代碼時嘗試打印object_id,看看你得到了什麼。你應該考慮在你的數據庫配置中把所有的PK都設爲NOT NULL。爲了尋找空值,都不應該這樣做

試試默認值設爲您的文章數據

object_id = request.POST.get('id', None) 
+0

我檢查了,我的'object_id'是None。有趣的事情 - 雖然'object_id'爲None,選定的對象有像2或3的id - 正整數!不好的魔法。 – demalexx

+0

你使用的是什麼django版本和DB後端?我只是在我的一個項目中嘗試了類似的查詢,並得到了預期的結果(ObjectDoesNotExist異常)。 –

+0

@brunodesthuilliers,1.3,MySQL。我認爲我們現在找不到原因 - 我在服務器上更改了代碼,並且我無法在本地再現它。感謝幫助。 – demalexx