由于该yahoo.finance.option_contracts
表是社区开放数据表,因此您需要将其作为查询环境的一部分。最简单的方法是加载所有社区表的环境文件;就像在 YQL 控制台中单击“显示社区表”一样。
通常可以通过env=...
在 YQL 查询 URL 中指定一个参数,或者(如您所做的)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()