YQL找不到选项卡的定义

2024-04-27 02:56:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码:

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

结果:

^{pr2}$

我知道表的存在是因为我可以在http://developer.yahoo.com/yql/console/处测试查询并且它可以工作。我错过了什么?在

更新:我将url发布到控制台,但没有在控制台中尝试的查询。查询现已附加。在

http://goo.gl/mNXwC

Tags: 代码fromimporthttppublicsymbolwherequery
2条回答

由于yahoo.finance.option_contracts表是一个Community Open Data Table,因此您需要将其作为查询环境的一部分。最简单的方法是加载all社区表的环境文件;就像在YQL控制台中单击“showcomunity tables”。在

通常可以通过在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以在实例化时定义默认环境的示例。在

^{pr2}$

它的用途如下:

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

如果需要,您仍然可以在对y.execute()的单个调用中重写env。在

将查询修改为以下内容是有效的。在

query = 'use "http://www.datatables.org/yahoo/finance/yahoo.finance.option_contracts.xml" as foo; SELECT * FROM foo WHERE symbol="SPY"'

可能存在更优雅的解决方案。如果有,请分享。谢谢。在

相关问题 更多 >