【问题标题】:Insertion and retrieval of timestamp into Cassandra CQL3 based table in Python在 Python 中将时间戳插入和检索到基于 Cassandra CQL3 的表中
【发布时间】:2013-07-30 05:05:28
【问题描述】:

我在 Cassandra 中使用 CQL3 创建了下表:

    CREATE TABLE user_log (
        user_id text,
        zone_id text,
        freq int,
        time timestamp,
        PRIMARY KEY (user_id, zone_id)
    )

我使用datastax Cassandra-Python 驱动程序将一些值插入到此表中,如下所示:

    fmt = '%m/%d/%Y %H:%M'
    t1 = datetime.strptime("01/01/2000 22:05", fmt)
    prepared = session.prepare("""
                    INSERT INTO user_log (user_id,zone_id,freq,time) VALUES (?,?,?,?)
                    """)
    session.execute_async(prepared.bind((str(Uid),str(zone_id),int(freq),t1 )))

插入没问题,但是当我尝试检索值时,它在检索时间值时抛出异常。所有其他列的检索工作正常。 Select * 也会抛出异常。

【问题讨论】:

  • 请详细说明一下。您是否尝试在 cqlsh 中执行select * from user_log?异常消息到底是什么?
  • 嗯,很奇怪。我将检索到的结果转储到 json 中,它会引发异常。当我尝试将其打印到控制台时,它工作正常。关于可能是什么原因的任何想法。检索到的时间戳以逗号分隔。 time=datetime.datetime(2013, 2, 5, 7, 37)
  • 似乎时间戳没有正确转储到 json 中。否则它工作正常。
  • JSON 没有日期/时间/时间戳类型,因此通常 JSON 库在尝试转换本机日期/时间/时间戳时会出错。但是许多 JSON 库允许您提供自定义编码器/解码器。

标签: python cassandra cql3


【解决方案1】:

如果您在 cassandra 中插入和检索时间戳时遇到问题,那么您并不孤单,请参阅以下内容: How to insert a datetime into a Cassandra 1.2 timestamp column

解决方案可能是从您的日期时间计算 unix 时间戳(自纪元以来经过的毫秒数),然后插入/检索它。

一般来说,如果您准确地说明了错误消息(如果有的话),写一个有用的答案会有所帮助吗?另外,究竟是哪一行代码导致了错误?

【讨论】:

  • Timestamp 不是 Json Serializer。这就是为什么它会抛出异常。
【解决方案2】:
import json
import uuid

class UUIDEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, uuid.UUID):
            return obj.hex
        return json.JSONEncoder.default(self, obj)

j = json.dumps( invar, indent=4, separators=(',', ': '), cls=UUIDEncoder )

【讨论】:

    猜你喜欢
    • 2018-02-16
    • 2014-05-10
    • 2017-03-06
    • 2018-10-06
    • 2012-05-07
    • 1970-01-01
    • 2014-01-30
    • 2017-01-23
    • 2013-06-30
    相关资源
    最近更新 更多