使用python-binance获取Binance交易对信息写入MySQL报错排查
问题排查与解决:Python 'list'无法转换为MySQL类型
这个错误的核心是你传给executemany的参数格式不符合要求,具体来说有两种常见情况:
- 你直接把从Binance拿到的
symbols字典列表传给了executemany,但它需要的是每个元素为元组/字典的列表,每个元组对应一行数据的字段值; - 你提取字段时不小心把某个字段的值弄成了列表类型,而MySQL的字符串字段无法直接接收列表。
正确的处理步骤:
构造符合要求的参数列表
Binance返回的symbols是字典列表,每个字典里包含symbol、baseAsset、quoteAsset这些字符串字段。你需要遍历这个列表,把每个字典里的目标字段提取出来组装成元组,再放到一个大列表里:# 假设你已经通过API拿到了symbols数据 # 方式1:普通循环 insert_data = [] for symbol_info in symbols: ticker = symbol_info['symbol'] coin1 = symbol_info['baseAsset'] coin2 = symbol_info['quoteAsset'] insert_data.append( (ticker, coin1, coin2) ) # 方式2:更简洁的列表推导式 insert_data = [ (s['symbol'], s['baseAsset'], s['quoteAsset']) for s in symbols ]执行executemany写入
把构造好的insert_data传给executemany,注意SQL语句的占位符要和元组里的字段顺序对应:sql = "INSERT INTO param_asset_binance (Ticker, Coin1, Coin2) VALUES (%s, %s, %s)" cursor.executemany(sql, insert_data) # 别忘了提交事务 conn.commit()
额外检查点:
- 确认
symbols里的symbol、baseAsset、quoteAsset都是字符串类型,不是列表(Binance返回的这些字段本身就是字符串,大概率不会有问题,但可以打印几个元素确认); - 检查MySQL表的字段类型:
Ticker、Coin1、Coin2应该设为VARCHAR类的字符串类型,和Python的str类型匹配。
内容的提问来源于stack exchange,提问作者Mat
相关产品推荐
相关产品推荐

