还在手动将Excel数据复制粘贴到MySQL数据库?太out啦!今天就教你如何用Python写个脚本,一键搞定数据导入,解放你的双手!
准备工作
首先,确保你已经安装了以下Python库:
- pandas: 用于读取Excel文件。
- mysql.connector 或 SQLAlchemy: 用于连接和操作MySQL数据库。
你可以使用pip来安装它们:
pip install pandas mysql-connector-python # 或者 pip install sqlalchemy
当然,别忘了你的MySQL数据库服务要正常运行,并且你有相应的权限进行数据导入。
核心代码
下面是一个示例脚本,它使用pandas
读取Excel文件,然后使用mysql.connector
将数据插入到MySQL数据库中。
import pandas as pd
import mysql.connector
# 1. 数据库连接配置
mysql_config = {
'user': 'your_user',
'password': 'your_password',
'host': 'your_host',
'database': 'your_database'
}
# 2. Excel文件路径
excel_file = 'your_excel_file.xlsx'
# 3. MySQL表名
mysql_table = 'your_table'
def import_excel_to_mysql(excel_file, mysql_table, mysql_config):
try:
# 3.1 读取Excel文件
df = pd.read_excel(excel_file)
# 3.2 连接到MySQL数据库
mydb = mysql.connector.connect(**mysql_config)
mycursor = mydb.cursor()
# 3.3 构建插入SQL语句
columns = ', '.join(df.columns)
placeholders = ', '.join(['%s'] * len(df.columns))
sql = f"""INSERT INTO `{mysql_table}` ({columns}) VALUES ({placeholders})"""
# 3.4 准备数据
data = df.values.tolist()
# 3.5 执行批量插入
mycursor.executemany(sql, data)
# 3.6 提交更改
mydb.commit()
print(f"成功导入{len(df)}行数据到表 {mysql_table}")
except Exception as e:
print(f"导入失败: {e}")
finally:
# 3.7 关闭连接
if mydb.is_connected():
mycursor.close()
mydb.close()
print("数据库连接已关闭")
# 调用函数,开始导入
if __name__ == '__main__':
import_excel_to_mysql(excel_file, mysql_table, mysql_config)
代码解释:
- 数据库连接配置: 你需要修改
mysql_config
字典,填入你的MySQL数据库的用户名、密码、主机地址和数据库名。 - Excel文件路径: 将
excel_file
变量设置为你的Excel文件的路径。 - MySQL表名: 将
mysql_table
变量设置为你要将数据导入的MySQL表名。 - 读取Excel文件:
pd.read_excel(excel_file)
使用pandas读取Excel文件,并将数据存储在一个DataFrame对象中。 - 连接到MySQL数据库:
mysql.connector.connect(**mysql_config)
使用mysql.connector
库连接到MySQL数据库。 - 构建插入SQL语句: 这段代码动态地构建了插入数据的SQL语句。
columns
变量包含了Excel表格的列名,placeholders
变量包含了占位符%s
,用于后续的数据插入。 - 准备数据:
df.values.tolist()
将DataFrame对象转换为一个列表,其中每个元素都是一行数据。 - 执行批量插入:
mycursor.executemany(sql, data)
使用executemany()
方法批量插入数据,提高效率。 - 提交更改:
mydb.commit()
提交对数据库的更改。 - 关闭连接: 确保在完成操作后关闭数据库连接,释放资源。
使用 SQLAlchemy (可选)
如果你更喜欢使用 SQLAlchemy,可以修改代码如下:
import pandas as pd
from sqlalchemy import create_engine
# 1. 数据库连接配置
mysql_config = {
'user': 'your_user',
'password': 'your_password',
'host': 'your_host',
'database': 'your_database'
}
# 2. Excel文件路径
excel_file = 'your_excel_file.xlsx'
# 3. MySQL表名
mysql_table = 'your_table'
def import_excel_to_mysql_sqlalchemy(excel_file, mysql_table, mysql_config):
try:
# 3.1 读取Excel文件
df = pd.read_excel(excel_file)
# 3.2 构建数据库连接字符串
engine_string = f"mysql+mysqlconnector://{mysql_config['user']}:{mysql_config['password']}@{mysql_config['host']}/{mysql_config['database']}"
# 3.3 创建 SQLAlchemy Engine
engine = create_engine(engine_string)
# 3.4 将 DataFrame 写入 MySQL
df.to_sql(mysql_table, engine, if_exists='append', index=False)
print(f"成功导入{len(df)}行数据到表 {mysql_table}")
except Exception as e:
print(f"导入失败: {e}")
# 调用函数,开始导入
if __name__ == '__main__':
import_excel_to_mysql_sqlalchemy(excel_file, mysql_table, mysql_config)
代码解释:
- 数据库连接配置: 和之前一样,修改
mysql_config
字典。 - 构建数据库连接字符串:
engine_string
变量包含了用于连接MySQL数据库的连接字符串,包括用户名、密码、主机地址和数据库名。 - 创建 SQLAlchemy Engine:
create_engine(engine_string)
创建了一个SQLAlchemy Engine对象,用于与数据库进行交互。 - 将 DataFrame 写入 MySQL:
df.to_sql(mysql_table, engine, if_exists='append', index=False)
使用to_sql()
方法将DataFrame对象写入MySQL数据库。if_exists='append'
表示如果表已存在,则将数据追加到表中。index=False
表示不将DataFrame的索引写入数据库。
错误处理
在实际应用中,可能会遇到各种错误,例如:
- Excel文件不存在或格式错误。
- 数据库连接失败。
- SQL语句错误。
- 数据类型不匹配。
为了提高脚本的健壮性,建议添加适当的错误处理机制。例如,可以使用try...except
语句来捕获异常,并打印错误信息。
进阶技巧
- 处理大型Excel文件: 如果Excel文件非常大,可以分批读取数据,避免内存溢出。
- 数据清洗和转换: 在将数据导入数据库之前,可以使用pandas对数据进行清洗和转换,例如去除空格、转换数据类型等。
- 日志记录: 使用logging模块记录脚本的运行日志,方便排查问题。
- 配置化: 将数据库连接信息、Excel文件路径等配置信息放在一个单独的配置文件中,方便修改和管理。
总结
通过本文的介绍,你已经掌握了使用Python将Excel数据导入MySQL数据库的基本方法。无论是使用mysql.connector
还是SQLAlchemy
,都可以实现自动化数据导入。希望这个脚本能帮助你提高工作效率,告别手动复制粘贴的时代!快去试试吧!别忘了根据你的实际情况修改代码哦!