数据库
首页 > 数据库> > Cassandra分页:如何使用get_slice使用cql库从Python查询Cassandra 1.2数据库

Cassandra分页:如何使用get_slice使用cql库从Python查询Cassandra 1.2数据库

作者:互联网

我有一个Cassandra 1.2集群,我使用cql库从Python中使用它.现在我需要使用get_slice实现一些看似非常简单的分页功能,但我找不到任何关于如何在cql库中使用这样的东西的文档:

get_slice("key" : table_key,
      "column_parent" : {"column_family" : "MyColumnFamily"},
      "predicate" :
       { "slice_range" : 
 { "start" : "SomeStartID", 
 "end" : "Z", 
 "reverse" : "false", 
 "count : "100" }
 } )

我在get_slice的随机文档中看到了这种类型的语法,它看起来不像CQL 3语法,如何从Python运行这种类型的查询到Cassandra 1.2集群?这是使用get_slice的当前方法吗?或者有新的语法或CQL 3替代方案?

提前致谢!

解决方法:

您可以采用相同的方式进行分页:设置限制并从列名开始,大于前一个接收的列名.作为一个例子,我在keypace ks1中创建了一个表test1:

CREATE TABLE test1 (
  a text,
  b text,
  PRIMARY KEY (a, b)
)

这里是我的行键,b是列名.然后我插入12条记录,a = a和b从a到l.所以

cqlsh:ks1> select * from test1;

 a | b
---+---
 a | a
 a | b
 a | c
 a | d
 a | e
 a | f
 a | g
 a | h
 a | i
 a | j
 a | k
 a | l

然后我使用CQL驱动程序使用此python进行分页:

import cql
con = cql.connect('localhost', keyspace='ks1', cql_version='3.0.0')
cursor = con.cursor()
last = ""
while last != None:
    cursor.execute("select * from test1 where a=:a and b>:b limit 5", {"a": "a", "b": last})
    last = None
    for row in cursor:
        print row
        last = row[1]

批量为5的页面.输出为:

[u'a', u'a']
[u'a', u'b']
[u'a', u'c']
[u'a', u'd']
[u'a', u'e']
[u'a', u'f']
[u'a', u'g']
[u'a', u'h']
[u'a', u'i']
[u'a', u'j']
[u'a', u'k']
[u'a', u'l']

标签:python,cassandra,cql3
来源: https://codeday.me/bug/20190625/1283997.html