【问题标题】:Cqlengine queries: how to return dictionary?Cqlengine 查询:如何返回字典?
【发布时间】:2015-01-31 10:21:44
【问题描述】:

我在 Django 应用程序中使用 cqlengine,其中 Cassandra 是辅助数据库。

在某些情况下,我需要手动加入 SQL 和 NoSQL 数据库请求的结果。

对于我正在使用的 SQL:

model_name.objects.all().values() 

返回字典,而不是模型实例对象。

但我在cqlengine 中找不到合适的方法。

作为python的初学者,我不知道如何最好地在cqlengine库中实现这个功能。

也许你有一些程序代码的例子,提供这个?

【问题讨论】:

    标签: python django dictionary cassandra cqlengine


    【解决方案1】:

    从 cqlengine 0.12 开始有内置功能。这是:CQLEngine Model Docs

    从 cqlengine 0.12 开始,我们添加了对像字典一样处理模型实例的支持。请参阅下面的示例。

    class Person(Model):
    first_name  = columns.Text()
    last_name = columns.Text()
    
    kevin = Person.create(first_name="Kevin", last_name="Deldycke")
    dict(kevin)  # returns {'first_name': 'Kevin', 'last_name': 'Deldycke'}
    kevin['first_name']  # returns 'Kevin'
    kevin.keys()  # returns ['first_name', 'last_name']
    kevin.values()  # returns ['Kevin', 'Deldycke']
    kevin.items()  # returns [('first_name', 'Kevin'), ('last_name', 'Deldycke')]
    
    kevin['first_name'] = 'KEVIN5000'  # changes the models first name
    

    所以,回答你的问题...你只需要做一个基本的查询,获取你的对象,然后将其转换为字典:

    dict(your_returned_model_object)
    

    您现在可以将返回的对象作为字典访问,就像上面引用的那样。

    【讨论】:

      【解决方案2】:

      我喜欢使用这样的循环生成器:

      [dict(foo) for foo in Bar.objects.all()]
      

      这将返回所有对象的字典,并根据您的代码库允许您进行自定义序列化和反序列化。

      【讨论】:

      • 非常感谢!如果我不需要获取所有字段,而只需要获取其中一些字段,并将结果呈现为字典?我找到了如何使用 values_list() 过滤字段,但结果是列表。有没有其他办法?
      • 我不建议使用它,考虑到 CQLEngine 有它自己的内置功能来处理它......我也不会使用 values_list() 。使用该模块之前,您是否阅读过官方文档?
      猜你喜欢
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      相关资源
      最近更新 更多