Python Cassandra cql: 插入时间戳和blob

1 投票
1 回答
2913 浏览
提问于 2025-04-18 00:39

我正在写一些Python代码,目的是收集一段时间内的数据。我需要把这些数据存储在Cassandra数据库里。今天我花了一整天的时间,但就是找不到合适的方法。

CREATE TABLE timearchive 
  (name_yymmddhh text, name text, ip text, time_current timestamp, data blob, 
   PRIMARY KEY (name_yymmddhh, time_current));

我可以创建表格,但在插入各种数据(当前时间的时间戳和数据块)时遇到了麻烦。我无法正确格式化这些数据。我打算按小时分行(在我的使用场景中,数据量应该没问题),每列存放每条数据(每分钟2-3条)。

这是我用来插入数据的代码。如果我把时间戳和数据块的格式改成整数或文本,它是可以工作的。

query = """INSERT INTO timearchive
            (name_yymmddhh, name, ip, time_current, data)
            VALUES (:name_yymmddhh, :name, :ip, :time_current, :data)"""
values = {'name_yymmddhh':rowkey,
          'name': dcname,
          'ip': ip,
          'time_current': timenow,
          'data': my_blob}
cursor.execute(query, values)

我有几个问题:

1) 我该如何在Python中生成Cassandra的时间戳:timenow?
这个链接对我没有帮助(对我来说太复杂了):Cassandra 1.2 使用Python和cql库插入/更新blob列类型

2) 我的数据是一个字典。它将是一个包含多个字典和其他数据的大字典。
(我找到了一些讨论,但没有一个能解决我的问题。似乎大约6个月前有一些更新,但没有简单的例子:https://github.com/datastax/python-driver/pull/39
我该如何放置:

my_dict = {'one': 1, 'two': 2, 'three': 3}  
 ...  
my_blob = ???

1 个回答

-1

解决了。需要使用最新的Datastax驱动程序来处理大对象(blob),并且要使用上面提到的INSERT方法(不要把它转换成字符串),还要正确使用pickle和bytearray。

撰写回答