可能是Python Sqlite3错误

2024-04-26 22:46:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张桌子,桌子里面有一个“杯”字栏“咖啡”

update coffee set cup=cup||'test_add'

这不会引发错误,但不会将字符串“test\u add”添加到列中!另外,cup列中的值当前为空。我花了很长时间才知道,当列没有值时,不能使用这种语法添加文本。这对我来说没有意义,因为列被定义为文本列,并且它没有值,所以对我来说似乎是等价的

a=""
a+="test_add"

这个语法很有效。另一方面如果是的话

a=None
a+="test_add"

它抛出了一个错误。所以在我看来,我放在最上面的代码应该要么添加文本要么抛出一个错误!!!你知道吗


Tags: 字符串test文本add定义错误语法update
1条回答
网友
1楼 · 发布于 2024-04-26 22:46:14

在SQL中,用NULL做任何事情都会返回NULL。特别是:

NULL || 'test_add'

为空。你说cup列没有值,加上你描述的症状意味着cup IS NULL是真的。所以你的cup || 'test_add'实际上是将字符串添加到列的值中,问题是NULL || any_string_you_wantNULL。你知道吗

如果要将NULL视为空字符串,请使用^{}

coalesce(X,Y,...)

The coalesce() function returns a copy of its first non-NULL argument, or NULL if all arguments are NULL. Coalesce() must be at least 2 arguments.

所以你要这样做:

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

Python和SQL是不同的语言,您不应该期望Python的None表现得像SQL的NULL。你没有看到bug,你只是看到了标准的NULL行为(当你不习惯它时,它通常看起来像bug,但那是另一回事)。你知道吗

相关问题 更多 >