2013-06-04 69 views
1

我有有一欄「杯」表裏面的「咖啡」可能的Python SQLITE3錯誤

update coffee set cup=cup||'test_add' 

,這並不產生一個錯誤的表,但它不添加字符串「test_add」到列!此外,列杯中的值目前什麼也沒有。它永遠讓我永遠無法使用這個語法在列沒有任何價值時添加文本。這沒有意義,我會列定義爲文本列,它沒有價值,所以這對我來說似乎等同於

a="" 
a+="test_add" 

這句法的作品。另一方面,如果它是

a=None 
a+="test_add" 

它會引發錯誤。所以在我看來,我放在最頂端的代碼應該添加文本或拋出一個錯誤!

回答

1

在SQL中,使用NULL做任何事情都會讓你回到NULL。尤其是:

NULL || 'test_add' 

爲NULL。您認爲cup列沒有任何價值,與您描述的症狀一起意味着cup IS NULL爲真。因此,您的cup || 'test_add'實際上確實會將您的字符串添加到列的值,問題是NULL || any_string_you_wantNULL

如果你想治療NULL像一個空字符串,然後用COALESCE

COALESCE(X,Y,...

聚結()函數返回的副本它的第一個非NULL參數,如果所有參數都是NULL,則爲NULL。 Coalesce()必須至少有2個參數。

所以,你會做這樣的事情:

update coffee set cup = coalesce(cup, '') || 'test_add' 

Python和SQL是不同的語言,你不應該指望Python的None的行爲類似於SQL的NULL。你沒有看到一個bug,你只是看到了標準的NULL行爲(當你不習慣它時,這往往看起來像一個錯誤,但這是另一回事)。

+0

哦,哎呀,謝謝我是新的sql(和python),它完美地解釋了它 – appleLover

+0

@appleLover:不要感覺不好,NULL首先會引發每個人循環。 –