2013-05-28 5 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

아니요 .. 지정한 링크에도 정의가 없습니다. – karthikr

답변

3

테이블이 Community Open Data Table이므로 쿼리 환경의 일부로 포함 시키십시오. 가장 쉬운 방법은 환경 파일을 모두로드하는 것입니다. 커뮤니티 테이블. YQL 콘솔에서 "커뮤니티 테이블 표시"를 클릭하는 것과 같습니다.

일반적으로 YQL 쿼리 URL에 env=... 매개 변수를 지정하거나 쿼리 자체에 use 절을 지정하면됩니다.

사용중인 파이썬 라이브러리를 사용하면 환경 파일에서 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 확장의 예입니다. 당신이 필요한 경우 당신은 여전히 ​​y.execute()에 대한 개별 호출에서 env을 무시할 수

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

:

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); 

처럼 사용할 수 있습니다.

+0

고마워요. env를 모든 execute()와 함께 전달하는 대신 초기화의 일부로 제공하는 방법이 있습니까? – Vishal

+0

아니요, 그렇다고해서'yql.Public'을 확장하는 것은 엄청난 노력이 아닙니다. 내 편집 된 답변보기 – salathe