在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()
posted @ 2025-04-08 10:09  姬高波  阅读(24)  评论(0)    收藏  举报