如何将Python异步API返回数据转列表并写入MySQL数据库?
解决方案:DataFrame转列表+MySQL批量插入
1. 将DataFrame转换为列表MyList
针对你的table(DataFrame格式),可以用两种常用方式转换为适合MySQL插入的列表格式:
- 方式一:转成元组列表(MySQL插入参数的标准格式)
# 排除DataFrame索引,将每行数据转为元组,最终得到元组组成的列表 MyList = [tuple(row) for row in table.to_records(index=False)]
- 方式二:转成列表嵌套格式
# 直接提取DataFrame的数值部分,转为列表的列表,同样排除索引列 MyList = table.values.tolist()
注意:如果DataFrame包含日期、JSON等特殊类型数据,提前将其转换为MySQL兼容的格式(比如日期转字符串、JSON转序列化字符串)
2. 使用mysql.connector插入数据到MySQL
先安装依赖
pip install mysql-connector-python pandas
实现代码
import mysql.connector from mysql.connector import Error def insert_data_to_mysql(data_list, target_table): # 替换为你的数据库实际配置 db_config = { 'user': 'your_username', 'password': 'your_password', 'host': 'localhost', 'database': 'your_db_name', 'raise_on_warnings': True } conn = None cursor = None try: # 建立数据库连接 conn = mysql.connector.connect(**db_config) if conn.is_connected(): cursor = conn.cursor() # 构造插入语句:根据数据列数生成对应数量的占位符%s col_num = len(data_list[0]) insert_sql = f"INSERT INTO {target_table} VALUES ({', '.join(['%s'] * col_num)})" # 批量插入数据(比单行插入效率高) cursor.executemany(insert_sql, data_list) conn.commit() print(f"成功插入 {cursor.rowcount} 条记录") except Error as err: print(f"数据库操作出错: {err}") if conn: conn.rollback() finally: # 确保关闭连接和游标 if cursor: cursor.close() if conn and conn.is_connected(): conn.close() print("数据库连接已关闭") # 调用示例:传入转换好的列表和目标表名 insert_data_to_mysql(MyList, "your_target_table")
*注意事项:
- 必须确保目标MySQL表的结构(列顺序、数据类型)和DataFrame完全匹配,否则会插入失败
- 批量插入优先用
executemany,避免循环调用execute导致性能问题 - 不要硬编码数据库账号密码,正式环境建议用配置文件或环境变量管理*
内容的提问来源于stack exchange,提问作者Shres
相关产品推荐
相关产品推荐

