在python脚本中:导出MySQL查询结果为excel格式 ?
脚本解释:开发人员需要从表中导出大量数据、由于服务器带宽较低、客户端工具navicat导出太慢、就需要写脚本从服务器上导出。
脚本1(简单测试一条SQL语句)
import mysql.connector
import pandas as pd
# 连接 MySQL 数据库
conn = mysql.connector.connect(
user='root', # 数据库用户名
password='1111111111', # 数据库密码
database='database_a', # 数据库名称
unix_socket='/var/run/mysqld/mysqld.sock' # 套接字路径
)
# 执行查询
query =f"""
SELECT
student_id AS '学生ID',
name AS '学生姓名',
enrollment_date AS '入学时间'
FROM students
WHERE student_id = 12345 #(这里写学生id)
AND enrollment_date >= '2025-03-01'
AND enrollment_date < '2025-04-01';
""" # 替换为你的实际查询语句
df = pd.read_sql(query, conn)
# 保存到 Excel 文件
df.to_excel('output.xlsx', index=False) # 替换为你想要保存的文件名
# 关闭连接
conn.close()
脚本2 (传入公司id和日期)
解释:我要批量查询导出、每个公司(或学生表)的信息、自动化定义时间
import mysql.connector
import pandas as pd
from datetime import datetime, timedelta
# 连接 MySQL 数据库
conn = mysql.connector.connect(
user='root', # 数据库用户名
password='1111111111', # 数据库密码
database='database_a', # 数据库名称
unix_socket='/var/run/mysqld/mysqld.sock' # 套接字路径
)
# 获取上个月的日期范围
current_date = datetime.now()
last_month = current_date - timedelta(days=current_date.day)
start_date = last_month.replace(day=1)
end_date = start_date + timedelta(days=32) # 加32天以确保包含整个月
end_date = end_date.replace(day=1) - timedelta(days=1) # 调整为月末
# 公司ID列表
company_ids = [
123456,
111222,
112233
]
# 为每个公司ID执行查询并导出数据
for sid in company_ids:
# 执行查询
query = f"""
SELECT
student_id AS '学生ID',
name AS '学生姓名',
enrollment_date AS '入学时间'
FROM students
WHERE student_id = {sid}(学生id)
AND enrollment_date >= '{start_date.strftime('%Y-%m-%d %H:%M:%S')}'
AND enrollment_date < '{end_date.strftime('%Y-%m-%d %H:%M:%S')}';
"""
df = pd.read_sql(query, conn)
# 保存到 Excel 文件,文件名为公司ID.xlsx
file_name = f"{sid}.xlsx"
df.to_excel(file_name, index=False)
# 关闭连接
conn.close()

浙公网安备 33010602011771号