如何用Python自动化SSMS查询导出CSV周度任务并配置定时运行
自动化实现方案
整套实现拆成Python核心导出逻辑和周度定时调度两部分,不用复杂组件,普通Windows环境就能跑通。
一、核心Python导出逻辑
你原来手动做的SSMS查数、导出CSV的操作,完全可以用Python脚本复现,步骤如下:
- 先装需要的依赖,执行命令:
pip install pandas pyodbc - 写脚本实现三个动作:连接SQL Server数据库、执行你原来在SSMS里跑的SQL语句、把结果存成指定路径的CSV文件。
可直接套用的脚本模板:import os from datetime import datetime import pandas as pd import pyodbc # -------------------------- 以下配置按需修改 -------------------------- # 数据库连接配置 DB_SERVER = "你的SQL Server实例地址,和SSMS登录时填的服务器名一致" DB_NAME = "要查询的数据库名" DB_USER = "数据库登录账号" DB_PWD = "数据库登录密码" ODBC_DRIVER = "{ODBC Driver 17 for SQL Server}" # 本地安装的ODBC驱动版本对应即可 # 你原来在SSMS中运行的完整SQL语句,直接粘贴进来 EXPORT_SQL = """ SELECT date, clientnumber, clientID, orderid -- 后面补全你原来的FROM、WHERE等语句逻辑 FROM 你的业务表 WHERE 你的时间筛选等条件 """ # CSV保存的文件夹,必须写绝对路径 SAVE_DIR = r"C:\指定的CSV存储文件夹全路径" # --------------------------------------------------------------------- def main(): # 生成带时间戳的文件名,避免多次运行文件覆盖 save_file_name = f"weekly_data_export_{datetime.now().strftime('%Y%m%d')}.csv" save_full_path = os.path.join(SAVE_DIR, save_file_name) # 拼接连接字符串,要是你用Windows身份验证登SSMS,就把UID、PWD两行删掉,加Trusted_Connection=yes; conn_str = ( f"DRIVER={ODBC_DRIVER};" f"SERVER={DB_SERVER};" f"DATABASE={DB_NAME};" f"UID={DB_USER};" f"PWD={DB_PWD};" "TrustServerCertificate=yes;" ) # 连接数据库查数,自动关闭连接 with pyodbc.connect(conn_str) as conn: result_df = pd.read_sql(EXPORT_SQL, conn) # 导出CSV,用utf-8-sig编码避免Excel打开中文乱码 result_df.to_csv(save_full_path, index=False, encoding="utf-8-sig") print(f"导出完成,文件路径:{save_full_path},共导出{len(result_df)}行数据") if __name__ == "__main__": main() - 手动运行几次脚本,对比导出的CSV和你之前手动从SSMS复制粘贴的结果,确认字段、数据量完全一致再往下走。
二、周度定时调度配置
不推荐用Python内置的schedule这类库做定时,需要脚本一直常驻运行,进程意外退出就会漏跑,直接用系统自带的调度工具最稳定:
- 如果是Windows环境:用系统自带的「任务计划程序」
- 创建基本任务,触发器选择「每周」,设置好你需要执行的星期几、具体时间点
- 操作选择「启动程序」,程序路径填本地python.exe的绝对路径(cmd执行
where python可查到),参数栏填你写的导出脚本的绝对路径 - 保存后右键点任务选「运行」,测试调度是否能正常触发、生成文件
- 如果是Linux服务器环境:用crontab配置即可,执行
crontab -e添加对应调度规则,比如每周一早上8点跑脚本的规则示例:0 8 * * 1 /usr/bin/python3 /你的脚本存放路径/export_script.py
三、常见踩坑提醒
- 所有路径都写绝对路径,不要用相对路径:定时任务执行时的工作目录和你手动跑脚本的目录不一致,用相对路径大概率会出现找不到文件夹、文件存错位置的问题
- 数据库账号尽量用固定的服务账号,不要用经常改密码的个人域账号,避免密码过期后连接失败
- 本地要安装对应版本的SQL Server ODBC驱动,没装的话pyodbc会报驱动找不到的错误
- 可以在脚本里加简单的异常捕获和日志记录,跑失败的时候记清楚报错原因,不用每次蹲点看执行结果
内容的提问来源于stack exchange,提问作者Sami
相关产品推荐
相关产品推荐

