2013-05-28 3 views
0

Мой код:YQL - Нет определения найдено Таблица

import yql 
y = yql.Public() 
query = 'SELECT * FROM yahoo.finance.option_contracts WHERE symbol="SPY"' 
y.execute(query) 

Результат:

yql.YQLError: No definition found for Table yahoo.finance.option_contracts 

Я знаю, что существует таблица, потому что я могу проверить запрос на http://developer.yahoo.com/yql/console/ и она работает. Что мне не хватает?

Обновление: я отправил URL-адрес консоли, но не запрос, который я попробовал в консоли. Запрос теперь подключен.

http://goo.gl/mNXwC 
+0

Nope .. Он говорит, что определение не найдено даже в ссылке, которую вы указываете – karthikr

ответ

3

Поскольку таблица yahoo.finance.option_contracts является Community Open Data Table, вы захотите включить ее как часть среды для запроса. Самый простой способ сделать это - загрузить файл окружения для всех общих таблиц; так же, как нажать «Показать таблицы сообщества» в консоли YQL.

Как правило, это можно сделать, указав параметр env=... в URL-адресе запроса YQL или (как вы это сделали) с предложением use в самом запросе.

Библиотека Python, которую вы используете, позволяет передавать файл окружения в качестве аргумента в execute().

import yql 
y = yql.Public() 
query = 'SELECT * FROM yahoo.finance.option_contracts WHERE symbol="SPY"' 
y.execute(query, env="store://datatables.org/alltableswithkeys") 

Вот пример расширения yql.Public, чтобы быть в состоянии определить среду по умолчанию на конкретизации.

class MyYql(yql.Public): 

    def __init__(self, api_key=None, shared_secret=None, httplib2_inst=None, env=None): 
     super(MyYql, self).__init__(api_key, shared_secret, httplib2_inst) 
     self.env = env if env else None 

    def execute(self, query, params=None, **kwargs): 
     kwargs["env"] = kwargs.get("env", self.env) 
     return super(MyYql, self).execute(query, params, **kwargs); 

Он может быть использован как:

y = MyYql(env="store://datatables.org/alltableswithkeys") 
query = 'SELECT * FROM yahoo.finance.option_contracts WHERE symbol="SPY"' 
r = y.execute(query) 

Вы все еще можете переопределить env в индивидуальном вызове y.execute(), если вам нужно.

+0

Спасибо. Есть ли способ предоставить env как часть инициализации вместо того, чтобы передавать его с каждым execute()? – Vishal

+0

Нет, но это не огромная работа для расширения 'yql.Public' для этого. См. Мой отредактированный ответ. – salathe

 Смежные вопросы

  • Нет связанных вопросов^_^