循环通过.JSON字典并通过SQLite3

时间:2017-12-10 21:40:21

标签: python sql for-loop sqlite

我正在尝试迭代.json列表。我想在SQLite3中为这三个子列表中的每一个在数据中创建单独的条目。

data = {u'symbols':[{u'optionType': None, u'dividendDate': u'2017-12-29T00:00:00.000000-05:00', u'eps': 2.79, u'currency': u'CAD', u'prevDayClosePrice': 32.41, u'averageVol3Months': 579272, u'industrySubgroup': u'InsuranceLife', u'isTradable': True, u'hasOptions': True, u'optionDurationType': None, u'optionExpiryDate': None, u'symbolId': 32304, u'outstandingShares': 415289000, u'tradeUnit': 1, u'optionStrikePrice': None, u'pe': 11.62, u'lowPrice52': 28.4, u'industrySector': u'FinancialServices', u'optionRoot': u'', u'description': u'POWER CORP OF CDA SV', u'symbol': u'POW.TO', u'securityType': u'Stock', u'dividend': 0.3585, u'minTicks': [{u'pivot': 0, u'minTick': 0.005}, {u'pivot': 0.5, u'minTick': 0.01}], u'averageVol20Days': 506545, u'industryGroup': u'InsuranceLife', u'optionContractDeliverables': {u'cashInLieu': 0, u'underlyings': []}, u'highPrice52': 33.69, u'yield': 4.43, u'listingExchange': u'TSX', u'isQuotable': True, u'optionExerciseType': None, u'marketCap': 13459516489, u'exDate': u'2017-12-07T00:00:00.000000-05:00'}, 

{u'optionType': None, u'dividendDate': u'2018-02-01T00:00:00.000000-05:00', u'eps': 2.95, u'currency': u'CAD', u'prevDayClosePrice': 35.28, u'averageVol3Months': 394431, u'industrySubgroup': u'InsuranceLife', u'isTradable': True, u'hasOptions': True, u'optionDurationType': None, u'optionExpiryDate': None, u'symbolId': 32316, u'outstandingShares': 713871000, u'tradeUnit': 1, u'optionStrikePrice': None, u'pe': 11.96, u'lowPrice52': 31.75, u'industrySector': u'FinancialServices', u'optionRoot': u'', u'description': u'POWER FINANCIAL CP', u'symbol': u'PWF.TO', u'securityType': u'Stock', u'dividend': 0.4125, u'minTicks': [{u'pivot': 0, u'minTick': 0.005}, {u'pivot': 0.5, u'minTick': 0.01}], u'averageVol20Days': 396594, u'industryGroup': u'InsuranceLife', u'optionContractDeliverables': {u'cashInLieu': 0, u'underlyings': []}, u'highPrice52': 37, u'yield': 4.68, u'listingExchange': u'TSX', u'isQuotable': True, u'optionExerciseType': None, u'marketCap': 25185368880, u'exDate': u'2017-12-28T00:00:00.000000-05:00'}, 

{u'optionType': None, u'dividendDate': u'2017-12-07T00:00:00.000000-05:00', u'eps': 2.03, u'currency': u'CAD', u'prevDayClosePrice': 24.85, u'averageVol3Months': 589611, u'industrySubgroup': u'REITRetail', u'isTradable': True, u'hasOptions': True, u'optionDurationType': None, u'optionExpiryDate': None, u'symbolId': 34330, u'outstandingShares': 326529000, u'tradeUnit': 1, u'optionStrikePrice': None, u'pe': 12.25, u'lowPrice52': 23.46, u'industrySector': u'RealEstate', u'optionRoot': u'', u'description': u'RIOCAN REAL EST INV TR', u'symbol': u'REI.UN.TO', u'securityType': u'Stock', u'dividend': 0.1175, u'minTicks': [{u'pivot': 0, u'minTick': 0.005}, {u'pivot': 0.5, u'minTick': 0.01}], u'averageVol20Days': 575707, u'industryGroup': u'REITs', u'optionContractDeliverables': {u'cashInLieu': 0, u'underlyings': []}, u'highPrice52': 27.25, u'yield': 5.68, u'listingExchange': u'TSX', u'isQuotable': True, u'optionExerciseType': None, u'marketCap': 8114245650, u'exDate': u'2017-11-29T00:00:00.000000-05:00'}]}

这是我所拥有的代码的一部分(我认为问题是由于对for循环如何与子数据交互产生误解):

indice = -1    

for y in data:

            indice +=1

            data = data['symbols'][indice]
            try:
                conn = sqlite3.connect('sql/investment_databse.db')
                c = conn.cursor()
                with conn:
                    c.execute('''INSERT INTO symbols(symbol,...

该代码仅用于插入数据中的第一项。我希望它遍历这三个。

我认为如果我每循环将[indice]增加1,它就会循环。在我看来,Python认为数据中只有一个元素可以循环使用。

你能帮助我理解为什么我的代码会跳过后两项并帮助编写一个代码来将数据字典的所有三个元素作为单独的SQL条目插入吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

只有data中的一个元素;键symbols

你应该迭代data["symbols"]。而且你根本不需要indice

for symbol in data["symbols"]:
   print(symbol["optionType"]) # etc