无法在Azure Table上获取超过1000行的行内容

时间:2019-05-22 21:29:56

标签: python-3.x azure

我正在尝试捕获超过1000行的内容。

因此,我尝试将每个内容添加到列表中,以便随后可以使用它。

coding:utf-8

import os
import json
from azure import *
from azure.storage import *
from azure.storage.table import TableService, Entity
import datetime


def Retrives_datas():

    twenty_hours_before_now = datetime.datetime.now() - datetime.timedelta(days=1)
    now = twenty_hours_before_now.isoformat()
    filter = "Timestamp gt datetime'" + now + "'"
    maker = None
    i=0
    table_service = TableService(account_name='MyAccount', sas_token='MySAS')
    while True:
        tasks  = table_service.query_entities('MyTable', filter = filter, timeout=None, num_results=1000, marker=maker)
        for task in tasks:
            i += 1
            print(i,tasks.items[i]['Status'])
        if tasks.next_marker != {}:
            maker = tasks.next_marker
        else:
            break

我得到以下错误:

999成功

  

回溯(最近通话最近):       print(i,tasks.items [i] ['Status'])IndexError:列表索引超出范围

知道我在更换时

print(i,tasks.items[i]['Status'])

通过

print(i)

我得到2770多行。

1 个答案:

答案 0 :(得分:1)

常见错误list index out of range,因为您希望访问列表[1000],尽管列表只有1000个项目(您设置了num_results=1000)。您只能访问list [999],因为索引以0开头。

只需向下移动i += 1行。

for task in tasks:

    print(i,tasks.items[i]['Status'])
    i += 1

我的样本数据:

enter image description here

输出:

enter image description here


作为总结,tasks.item的长度采用将要返回的下一个列表的大小,而不是递增。

解决方案:如果i == <num_results>: i = 0

添加