如何使用Python将多个CSV文件导入到单个SQLite或MySQL数据库中?
多CSV文件批量导入数据库解决方案
SQLite实现方案
你可以基于单文件导入的逻辑,增加遍历本地CSV文件的步骤即可,依赖库为sqlite3、pandas、os,示例代码如下:
import sqlite3 import pandas as pd import os # 配置参数 csv_folder = "./csv_files" # 存放所有CSV文件的文件夹路径 sqlite_db_path = "all_data.sqlite" # 目标SQLite数据库路径 # 建立数据库连接 conn = sqlite3.connect(sqlite_db_path) # 遍历文件夹下所有CSV文件 for filename in os.listdir(csv_folder): if filename.endswith(".csv"): # 取文件名(去掉.csv后缀)作为表名 table_name = os.path.splitext(filename)[0] # 可选:替换表名中的特殊字符避免报错 table_name = table_name.replace(" ", "_").replace("-", "_") csv_path = os.path.join(csv_folder, filename) # 读取CSV并导入数据库 df = pd.read_csv(csv_path) df.to_sql(table_name, conn, if_exists='append', index=False) print(f"文件{filename}已导入表{table_name}") # 关闭连接 conn.close()
MySQL实现方案
MySQL场景下推荐配合sqlalchemy创建数据库连接引擎,依赖库为pandas、sqlalchemy、pymysql,示例代码如下:
import os import pandas as pd from sqlalchemy import create_engine # 配置参数 csv_folder = "./csv_files" # 存放所有CSV文件的文件夹路径 # MySQL连接参数,按实际情况修改 mysql_config = { "user": "你的数据库用户名", "password": "你的数据库密码", "host": "127.0.0.1", "port": 3306, "database": "目标数据库名" } # 创建数据库连接引擎 engine = create_engine(f"mysql+pymysql://{mysql_config['user']}:{mysql_config['password']}@{mysql_config['host']}:{mysql_config['port']}/{mysql_config['database']}?charset=utf8mb4") # 遍历文件夹下所有CSV文件 for filename in os.listdir(csv_folder): if filename.endswith(".csv"): table_name = os.path.splitext(filename)[0] table_name = table_name.replace(" ", "_").replace("-", "_") csv_path = os.path.join(csv_folder, filename) df = pd.read_csv(csv_path) df.to_sql(table_name, engine, if_exists='append', index=False) print(f"文件{filename}已导入表{table_name}") # 关闭引擎 engine.dispose()
常见注意事项
- 若CSV文件名包含空格、特殊符号,建议提前做字符替换,避免数据库表名不合法报错
if_exists参数可根据需求调整:replace为覆盖原有表数据和结构,append为在已有表中追加数据,fail为表存在时直接报错终止操作- 单文件体积超过1G的大CSV,可在
pd.read_csv中添加chunksize=10000参数分批读取导入,避免内存溢出
内容的提问来源于stack exchange,提问作者kinder chen
相关产品推荐
相关产品推荐

