由于yahoo.finance.option_contracts 表是Community Open Data Table,您需要将其作为查询环境的一部分包含在内。最简单的方法是为 all 社区表加载环境文件;就像在 YQL 控制台中单击“显示社区表”一样。
通常可以通过在 YQL 查询 URL 中指定 env=... 参数或(如您所做的)在查询本身中使用 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)
如果需要,您仍然可以在单独调用 y.execute() 时覆盖 env。