2015-12-09 92 views
1

我對所提到的一切都很陌生。我的目標是從YQL獲取一些財務數據並插入到MySQL中,這是通過python調用完成的。因此,提出如下.py文件:Python將YQL結果提取到MySQL中

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:並非所有參數都用在SQL語句中」

當回顧實際插入到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中。任何意見表示讚賞。謝謝。

+0

FYI也試過json.loads >>> json_str = json.loads(yresult) 回溯(最近通話最後一個): 文件「 「,第1行,在 文件」/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py「,第338行,載入中 'return _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:期望的字符串或緩衝區 – MagnusTheStrong

回答

0

僅供參考。

二手pprint成功地繞過錯誤

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