在Python中为Cassandra生成UUID

Hen*_*sel 10 python uuid cassandra pycassa

嘿,我正在使用

cf.insert(uuid.uuid1().bytes_le, {'column1': 'val1'}) (pycassa)

为Cassandra创建一个TimeUUID,但收到错误

InvalidRequestException: 
InvalidRequestException(why='UUIDs must be exactly 16 bytes')
Run Code Online (Sandbox Code Playgroud)

它不起作用

uuid.uuid1()
uuid.uuid1().bytes
str(uuid.uuid1())
Run Code Online (Sandbox Code Playgroud)

无论是.

创建与CompareWith ="TimeUUIDType"标志一起使用的有效TimeUUID的最佳方法是什么?

谢谢,
亨里克

Sch*_*jer 9

看起来您使用的是uuid作为行键而不是列名.

' compare_with:TimeUUIDType '属性指定将使用TimeUUIDType比较列名称,即它告诉Cassandra如何对进行排序以进行切片操作

您是否考虑过使用任何高级python客户端?例如Tradedgy,Lazy Boy,TelephusPycassa


Car*_*res 4

您必须确保您的列族架构接受 UUID 作为键。您的代码将使用创建为(使用 cassandra-cli)的列族:

create column family MyColumnFamily
  with column_type = 'Standard'
  and comparator = 'AsciiType'
  and default_validation_class = 'BytesType'
  and key_validation_class = 'TimeUUIDType';
Run Code Online (Sandbox Code Playgroud)

要向此 CF 添加值:

import pycassa
pool = pycassa.ConnectionPool('Keyspace1')
cf = pycassa.ColumnFamily(pool, 'MyColumnFamily')
cf.insert(uuid.uuid1(), {'column1': 'val1'})
Run Code Online (Sandbox Code Playgroud)