Cassandra python 驱动程序 event_time

Cassandra python driver event_time

我在将 python 驱动程序 returns 的 event_time 转换为时间戳时遇到了一些问题。

基本上,我需要将时间戳与一些关联数据一起存储,然后按时间范围进行查询。一开始,我不知道你可以在查询中放入时间戳,所以我会这样将它们转换为字符串:

datetime.utcfromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')

现在,当我从 python 查询数据时(我以与上述相同的方式转换时间戳并将它们放入查询中),我得到了我想要转换回时间戳的日期时间对象。我试过了

(row.event_time - datetime.utcfromtimestamp(0)).total_seconds()

但这似乎与时区混淆了。这是否意味着返回的日期时间不是 UTC?我尝试了一些我在网上找到的其他转换,但没有任何效果。一旦它几乎可以工作,但是当它到达夏令时开关的时间时,我会得到新的一小时偏移量。

所以,我的问题是:在 Python 和 Cassandra 之间使用时间戳的正确方法是什么?难道不能像 unix 时间戳一样简单吗?

在没有看到您的代码和预期结果的情况下,我会提供以下内容:

如果您在查询中插入时间字符串,数据库将假定这是当地时间并转换为 UTC。如果您的字符串包含 UTC 偏移量 (+0000),则不会发生这种情况(请注意,因为您正在格式化的日期时间对象是时区原始的,'%z' 将不起作用)。

如果您愿意,可以让驱动程序使用参数化形式处理编码:

session.execute("INSERT INTO <table> (key, time) VALUES (%s, %s)", (key, datetime.utcfromtimestamp(timestamp))

session.execute("INSERT INTO <table> (key, time) VALUES (%s, %s)", (key, long(timestamp * 1000)))  # scale to milliseconds

查询返回的值将是 UTC、时区原始日期时间对象。