You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现SQL文件日期动态替换及用户强制输入校验需求

解决方案

1. 日期输入强制校验

先实现一个循环校验的函数,确保用户必须输入MM/DD/YYYY格式的日期才能继续:

from datetime import datetime

def get_valid_report_date():
    while True:
        date_input = input("请输入报告日期(格式:MM/DD/YYYY):").strip()
        try:
            # 验证格式并转成标准字符串
            report_date = datetime.strptime(date_input, "%m/%d/%Y")
            return report_date.strftime("%m/%d/%Y")
        except ValueError:
            print("格式不对!必须是MM/DD/YYYY,比如'10/31/2022',重新输!")

2. SQL文件日期精准替换

用正则表达式匹配SQL中所有'MM/DD/YYYY'格式的日期字符串,不管原日期是什么,都能替换成用户输入的合法日期:

import re

def replace_sql_date(sql_file_path, target_date):
    # 读取原始SQL内容
    with open(sql_file_path, 'r', encoding='utf-8') as f:
        sql_content = f.read()
    
    # 正则匹配单引号包裹的MM/DD/YYYY格式日期
    date_pattern = r"'(\d{1,2}/\d{1,2}/\d{4})'"
    # 替换成目标日期,保留单引号
    updated_sql = re.sub(date_pattern, f"'{target_date}'", sql_content)
    
    # 可选:要么覆盖原SQL文件,要么生成新文件(推荐生成新文件避免误改原脚本)
    # with open(sql_file_path, 'w', encoding='utf-8') as f:
    #     f.write(updated_sql)
    return updated_sql

3. 完整整合代码(含SQL执行与CSV导出)

结合数据库执行和CSV导出的完整流程(以SQLAlchemy+pandas为例,根据你的数据库类型调整连接字符串):

from datetime import datetime
import re
import pandas as pd
from sqlalchemy import create_engine

def get_valid_report_date():
    while True:
        date_input = input("请输入报告日期(格式:MM/DD/YYYY):").strip()
        try:
            report_date = datetime.strptime(date_input, "%m/%d/%Y")
            return report_date.strftime("%m/%d/%Y")
        except ValueError:
            print("格式不对!必须是MM/DD/YYYY,比如'10/31/2022',重新输!")

def replace_sql_date(sql_file_path, target_date):
    with open(sql_file_path, 'r', encoding='utf-8') as f:
        sql_content = f.read()
    
    date_pattern = r"'(\d{1,2}/\d{1,2}/\d{4})'"
    updated_sql = re.sub(date_pattern, f"'{target_date}'", sql_content)
    return updated_sql

def execute_sql_to_csv(updated_sql, db_conn_str, csv_path):
    # 创建数据库连接(替换成你的数据库信息)
    engine = create_engine(db_conn_str)
    # 执行SQL并获取数据
    df = pd.read_sql(updated_sql, engine)
    # 导出CSV
    df.to_csv(csv_path, index=False, encoding='utf-8-sig')
    print(f"搞定!CSV文件已生成:{csv_path}")

if __name__ == "__main__":
    # 步骤1:拿到合法日期
    target_date = get_valid_report_date()
    # 步骤2:替换SQL里的日期
    sql_path = "myreport.sql"
    updated_sql = replace_sql_date(sql_path, target_date)
    # 步骤3:执行SQL并导出CSV(替换成你的数据库连接字符串)
    db_conn = "mysql+pymysql://用户名:密码@主机:端口/数据库名"
    csv_output = f"月度报告_{target_date.replace('/', '_')}.csv"
    execute_sql_to_csv(updated_sql, db_conn, csv_output)

关键提示

  • 正则表达式会匹配所有符合'MM/DD/YYYY'格式的日期,不管SQL里原来写的是哪天,都能精准替换
  • 日期校验会循环提示,直到用户输入正确格式为止,完全强制校验
  • 建议把替换后的SQL保存为新文件,避免误修改原始的SQL脚本
  • 数据库连接字符串要根据你用的数据库(MySQL、SQL Server、PostgreSQL等)调整格式

内容的提问来源于stack exchange,提问作者bananas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:35:27