可能是Python Sqlite3 Bug

时间:2013-06-04 05:21:24

标签: python sql sqlite sql-update

我有一张桌子,桌子里面有一个“杯子”,里面有一个“杯子”。

update coffee set cup=cup||'test_add'

这不会引发错误,但它不会将字符串'test_add'添加到列中!另外,柱杯中的值目前还没有。永远花了我一把,当列没有值时,你不能使用这种语法添加文本。这对我来说没有意义,因为列被定义为TEXT列,并且它没有值,所以它似乎等同于我

a=""
a+="test_add"

这个语法有效。另一方面,如果它是

a=None
a+="test_add"

它会抛出错误。所以在我看来,我放在最顶层的代码应该添加文本或抛出错误!!!

1 个答案:

答案 0 :(得分:1)

在SQL中,使用NULL执行几乎任何操作都会返回NULL。特别是:

NULL || 'test_add'

是NULL。您说cup列没有值,与您描述的症状一起表示cup IS NULL为真。因此,cup || 'test_add'确实会将您的字符串添加到列的值中,问题是NULL || any_string_you_wantNULL

如果您想将NULL视为空字符串,请使用COALESCE

  

聚结( X,Y,...

     

coalesce()函数返回其第一个非NULL参数的副本,如果所有参数都为NULL,则返回NULL。 Coalesce()必须至少有2个参数。

所以你会做这样的事情:

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

Python和SQL是不同的语言,你不应该期望Python的None表现得像SQL的NULL。你没有看到一个错误,你只是看到标准的NULL行为(当你不习惯它时,这通常看起来像一个错误,但这是另一个故事)。