gpt4 book ai didi

python - cassandra 没有为后来在 python 模型中添加的新列设置默认值

转载 作者:行者123 更新时间:2023-12-01 03:26:34 25 4
gpt4 key购买 nike

我有如下代码。

from uuid import uuid4
from uuid import uuid1

from cassandra.cqlengine import columns, connection
from cassandra.cqlengine.models import Model
from cassandra.cqlengine.management import sync_table


class BaseModel(Model):
__abstract__ = True

id = columns.UUID(primary_key=True, default=uuid4)
created_timestamp = columns.TimeUUID(primary_key=True,
clustering_order='DESC',
default=uuid1)
deleted = columns.Boolean(required=True, default=False)

class OtherModel(BaseModel):
__table_name__ = 'other_table'



if __name__ == '__main__':
connection.setup(hosts=['localhost'],
default_keyspace='test')
sync_table(OtherModel)

OtherModel.create()

第一次执行后,当运行查询时,我可以在数据库中看到记录。

cqlsh> select * from test.other_table;

id | created_timestamp | deleted
--------------------------------------+--------------------------------------+---------
febc7789-5806-44d8-bbd5-45321676def9 | 840e1b66-cc73-11e6-a66c-38c986054a88 | False

(1 rows)

此后,我在 OtherModel 中添加了新列 name 并运行相同的程序。

class OtherModel(BaseModel):
__table_name__ = 'other_table'
name = columns.Text(required=True, default='')




if __name__ == '__main__':
connection.setup(hosts=['localhost'],
default_keyspace='test')
sync_table(OtherModel)

OtherModel.create(name='test')

检查数据库条目时

cqlsh> select * from test.other_table;

id | created_timestamp | deleted | name
--------------------------------------+--------------------------------------+---------+------
936cfd6c-44a4-43d3-a3c0-fdd493144f4b | 4d7fd78c-cc74-11e6-bb49-38c986054a88 | False | test
febc7789-5806-44d8-bbd5-45321676def9 | 840e1b66-cc73-11e6-a66c-38c986054a88 | False | null

(2 rows)

有一行 namenull

但我无法查询 null 值。

cqlsh> select * from test.other_table where name=null;
InvalidRequest: code=2200 [Invalid query] message="Unsupported null value for indexed column name"

我得到引用How Can I Search for Records That Have A Null/Empty Field Using CQL? .

当我在模型中设置 default='' 时,为什么没有为表中的所有 null 值设置?

有没有办法通过查询将name中的null值设置为默认值''

最佳答案

空单元格实际上只是没有被设置。并且您无法查询缺少数据的情况,因为它是一个过滤操作。它不可扩展或无法高效执行,因此 C* 不会鼓励(或者在本例中甚至允许)这样做。

返回并追溯设置所有先前创建的行的值将非常昂贵(必须读取所有内容,然后进行尽可能多的写入)。不过,在应用程序方面,只需说 if name is null its '' 就很容易了。

关于python - cassandra 没有为后来在 python 模型中添加的新列设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41351996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com