Python实现API响应转DataFrame并导入SQLite表求助
解决将Pandas DataFrame导入SQLite表的问题
嘿,你已经搞定了调用API和转换DataFrame这两步,真的很棒!把DataFrame导入SQLite其实没那么复杂,咱们直接来解决这个瓶颈~
首先先把你截断的前两步代码补全(应该是把JSON数据转成DataFrame对吧),然后加上导入SQLite的部分,完整代码如下:
import csv import pandas as pd import requests import sqlite3 # 新增导入sqlite3库 # 调用API并转换为DataFrame data_request = requests.get('https://api.blockcypher.com/v1/eth/main/txs') json_data = data_request.json() df = pd.DataFrame(json_data) # 补全你截断的代码 # 连接SQLite数据库——如果eth_transactions.db文件不存在,会自动在当前目录创建 conn = sqlite3.connect('eth_transactions.db') # 将DataFrame写入名为eth_txs的SQLite表 # 参数说明: # - if_exists='replace':如果表已经存在就替换掉,也可以选'append'追加数据或者'fail'报错 # - index=False:不要把DataFrame的索引列写入数据库表 df.to_sql('eth_txs', conn, if_exists='replace', index=False) # 关闭数据库连接 conn.close()
更安全的写法:用上下文管理器自动管理连接
上面的写法需要手动关闭连接,万一忘记了可能会有问题,推荐用with语句来自动处理连接的打开和关闭:
import csv import pandas as pd import requests import sqlite3 data_request = requests.get('https://api.blockcypher.com/v1/eth/main/txs') json_data = data_request.json() df = pd.DataFrame(json_data) # with块结束后会自动关闭连接,不用手动调用close() with sqlite3.connect('eth_transactions.db') as conn: df.to_sql('eth_txs', conn, if_exists='replace', index=False)
可能遇到的小问题及解决方法
如果导入时报错,大概率是DataFrame里有SQLite不支持的嵌套数据类型(比如某些列是字典或列表),这时候可以把这些列转换成JSON字符串再导入:
import csv import pandas as pd import requests import sqlite3 import json data_request = requests.get('https://api.blockcypher.com/v1/eth/main/txs') json_data = data_request.json() df = pd.DataFrame(json_data) # 处理嵌套类型的列:把字典/列表转成JSON字符串 for col in df.columns: # 检查列里是否有字典或列表类型的数据 if df[col].apply(type).isin([dict, list]).any(): df[col] = df[col].apply(json.dumps) # 再写入数据库 with sqlite3.connect('eth_transactions.db') as conn: df.to_sql('eth_txs', conn, if_exists='replace', index=False)
这样应该就能顺利把数据导入SQLite表啦!如果还有具体的报错信息,也可以再提出来细化解决~
内容的提问来源于stack exchange,提问作者user1599325
相关产品推荐
相关产品推荐

