【发布时间】:2015-12-09 14:16:54
【问题描述】:
我对所提到的一切都不熟悉。我的目标是从 YQL 中获取一些财务数据并插入 MySQL,这是通过 python 调用完成的。因此,制作了以下 .py 文件:
import mysql.connector
import yahoo.yql
cnx = mysql.connector.connect(user='conn', password='abc123', database='yahoodata')
cursorA = cnx.cursor()
cursorB = cnx.cursor()
## Firstly, read all Symbol as an array in python
myquery = ("SELECT Symbol FROM yahoodata.nasdaq100list")
cursorA.execute(myquery)
myresult = cursorA.fetchall()
## Query YQL with each Symbol, literally loop 100 times
for i in myresult:
yquery = 'select Symbol,Date,High,Low from yahoo.finance.historicaldata where symbol = "%s" and startDate = "2014-01-01" and endDate = "2014-12-31"' % i
yresult = yahoo.yql.YQLQuery().execute(yquery)
## Insert Data from YQL fetch to MySQL
insert = "INSERT INTO daily_avg_2014(Symbol,Date,High,Low) VALUES (%(symbol)s, %(date)s, %(high)s, %(low)s)"
cursorB.executemany(insert, yresult)
cursor.close()
cnx.close()
YQL 成功返回 JSON 格式的数据。但是,INSERT 会一直说“mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement”
当回顾实际插入 MySQL 的内容时,我发现 JSON 格式不正确,因为我将它们放入字符串列表/数组中
>>> print yresult
{u'query': {u'count': 252, u'lang': u'en-US', u'results': {u'quote': [{u'High': u'51.68', u'Date': u'2014-12-31', u'Symbol': u'YHOO', u'Low': u'50.459999'},
据我了解,YQL 似乎在返回我需要的 JSON 格式的结果方面做得很好,但是我对 Python 的误用没有正确处理,因此无法插入 MySQL。任何评论表示赞赏。谢谢。
【问题讨论】:
-
FYI 还尝试了 json.loads >>> json_str = json.loads(yresult) Traceback(最近一次调用最后):文件“
”,第 1 行,在 文件“ /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py”,第 338 行,在加载中返回 _default_decoder.decode(s) 文件“/System/Library/Frameworks/ Python.framework/Versions/2.7/lib/python2.7/json/decoder.py",第 366 行,在解码 obj 中,end = self.raw_decode(s, idx=_w(s, 0).end()) TypeError : 预期的字符串或缓冲区