【问题标题】:Python fetch YQL result into MySQLPython 获取 YQL 结果到 MySQL
【发布时间】: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 : 预期的字符串或缓冲区

标签: python mysql sql json


【解决方案1】:

仅供参考。

使用 pprint 成功绕过该错误

yresult = yahoo.yql.YQLQuery().execute(yquery)
jsoned_yresult = pprint.PrettyPrinter(indent=2).pformat(yresult['query']['results']['quote'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多