python-driver分页不起作用

时间:2017-02-09 04:12:50

标签: python cassandra pagination driver cql

我有以下代码使用cassandra python驱动程序进行分页

我尝试了覆盖查询并设置会话default_fetch_size。但是它们都没有工作,结果始终是表中的所有行。我错过了什么?

from cassandra.cluster import Cluster
from cassandra.query import SimpleStatement

# setup
cluster = Cluster(["10.40.10.xxx","10.40.10.xxx","10.40.22.xxx","10.40.22.xxx"])
session = cluster.connect()
session.set_keyspace("ad_realtime")
# session.default_fetch_size = 10

query = "SELECT * from campaign_offset"
statement = SimpleStatement(query, fetch_size=10)
results = session.execute(statement)

for row in results:
   print row

3 个答案:

答案 0 :(得分:1)

在Python驱动程序中进行分页并不意味着只获取部分查询。这意味着一次只能获取部分查询。

您的代码

for row in results:
   print row

正在调用分页机制。基本上这是创建一个迭代器,它一次只能从查询定义的结果集中请求fetch_size行。

使用LIMITWHERE条款来限制您的实际结果。 cassandra pagination: the difference between driver and CQL

答案 1 :(得分:0)

您可以使用current_rows获取当前页面的行,例如:

for row in results.current_rows:
    print row

答案 2 :(得分:0)

以下代码可以帮助您以分页的方式获取结果-

def fetch_rows(stmt: Statement, fetch_size: int = 10):
    stmt.fetch_size = fetch_size
    rs: ResultSet = session.execute(stmt)
    has_pages = rs.has_more_pages
    while has_pages:
        yield from rs.current_rows
        print ('-----------------------------------------')
        has_pages = rs.has_more_pages
        rs = session.execute(ps, paging_state=rs.paging_state)

def execute():
    query = "SELECT  col1, col2 FROM my_table WHERE some_partition_key='part_val1' AND some_clustering_col='clus_val1'"
    ps = session.prepare(query)
    for row in fetch_rows(ps, 20):
        print(row)
        # Process the row and perform desired operation