【问题标题】:Insert a dict in cassandra DB在 cassandra DB 中插入一个字典
【发布时间】:2016-05-30 22:15:22
【问题描述】:

我有一个 cassandra 数据库,其键空间如下所示:

CREATE TABLE custumer_events_service.events(
    acceptFirstContactDuration decimal,
    currentTime timestamp,
    visitorIdentifier text,
    PRIMARY KEY (visitorIdentifier, currentTime)
) WITH CLUSTERING ORDER BY (currentTime DESC);

还有一个 python 字典

{u'acceptFirstContactDuration': 0,
 u'currentTime': u'2016-02-18T11:51:55.468Z',
 u'12eca72928845aae26268f431b8c75b2564d7919c916e',}

有没有办法直接用cassandra-driver 插入这个字典?我正在寻找类似 mongodb 的东西

>>> import datetime
>>> post = {"author": "Mike",
...         "text": "My first blog post!",
...         "tags": ["mongodb", "python", "pymongo"],
...         "date": datetime.datetime.utcnow()}

>>> posts = db.posts
>>> post_id = posts.insert_one(post).inserted_id

【问题讨论】:

    标签: python mongodb dictionary cassandra nosql


    【解决方案1】:

    您可以手动构造一个 CQL 插入语句迭代字典中的键和值,但 cqlengine Model 可能比 dict 更适合使用,并且很容易填充 Model使用来自dict 的值。

    您可以像这样定义Model(将其与您的所有列一起扩展):

    class CustomerEventsServiceEvent(Model):
        __table_name__ = "customer_events_service.events"
    
        acceptFirstContactDuration = columns.Decimal()
        allSeenPageCount = columns.Decimal()
        callAcceptedCount = columns.Decimal()
    

    如果d 是您的字典变量的名称,那么

    event = CustomerEventsServiceEvent(**d)
    event.save()
    

    相当于您的 MongoDB 操作。

    【讨论】:

    • 酷,我有两个问题:1)字典前的**是什么意思? 2)有没有办法以这种方式将一批dicts(包含20000个元素)插入cassandra?提前致谢
    • ** 将字典解压缩为关键字参数。 Python 中的许多函数被定义为采用 **kwargs,这意味着它们可以采用任意参数列表,并且在变量之前 ** 是将字典解包到这些参数中的方法。您可以使用Batch Query 将所有这些更新一起批量处理。
    • 哎呀,我在CustomerEventsServiceEvent(**d) 上收到了这个TypeError: deserialize() takes exactly 2 positional arguments (1 given)
    • 看起来这可能与这个最近的问题有关? datastax-oss.atlassian.net/browse/PYTHON-354 - 在这种情况下,您可能希望在该修复程序进入时更新到最新版本的驱动程序,或者不幸地将您的日期时间字段预处理为 python 日期时间而不是 ISO 8601 字符串。
    猜你喜欢
    • 2018-12-31
    • 2014-10-04
    • 2021-09-23
    • 1970-01-01
    • 2017-06-11
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    相关资源
    最近更新 更多