2011-01-29 9 views
1

Я использую модуль Python-Freebase mqlread(). По следующему запросу:Как получить курсор из mqlread() при использовании Freebase API?

query = [{ 
    "cursor": True, 
    "id":  None, 
    "type": "/games/game", 
    "mid": None, 
}] 

Это возвращает 100 записей, но результат не включает в себя «курсор». Если вы запустите запрос вручную, вы получите что-то вроде:

{ "code": "/api/status/ok", "cursor": "eNqFj8FqwzAQRD-mF4sisrtaaaWlhP6H8MHYNTUEW8hpKP36KjgU2kvnMoeZ4THjR923qhKS07wpAvR5VZbYBIL9sE76FDGAs-yCA_FISprL_nWUt5tC383L59ukh9llH_TvpL7Y7rYUdZ4CN9iRITB6vTwnAhriCAwAgXGO8Etkz48dicnvy3ptTGO6OwgsBwIfwJNeHpDWowgh_URO63-M0Z7vM0neGZNL3RrihBKFU_uZS2l3sT-9cpIBaRrnOE8JhaAhQL4B9ZFRmg==", "result": [ 

{ 
    "id": "/en/cities_and_knights_of_catan", 
    "mid": "/m/02hq3", 
    "type": "/games/game" 
}, 
.... 

Что содержит «курсор». Но результат от:

freebase.mqlread(query, extended=True) 

Вернется:

[{u'type': u'/games/game', u'id': u'/en/cities_and_knights_of_catan'}, ... 

который разбирает "код" и "курсор". Как я могу получить «курсор»?

ответ

1

Я обнаружил, что модуль Freebase-Python фактически включает в себя метод, который заботится о курсорах для вас. Просто вызовите mqlreaditer (query, extended = true), и он вернет генератор Python, с которым вы можете выполнить итерацию. За кулисами модуль Freebase будет запрашивать и отслеживать курсор, возвращать результаты по запросу до тех пор, пока не будет достигнут «ложный» курсор.

Очень просто!

0

Поддержка параметров огибающей MQL была отброшена, предположительно случайно, в версии 1.0.8 Freebase Python.

Если вам не нужны расширения MQL, вы можете просто отключить параметр extended=True и использовать mqlreaditer(query).

Если вам нужны расширения MQL (или другие параметры конверта), вам придется вернуться к 1.0.6, пока кто-то не устранит проблему и не сделает новую версию.

sudo easy_install freebase==1.0.6 
Смежные вопросы