from datetime import date, timedelta, datetime import holidays from config import Config import psycopg2 import pandas as pd import pymysql # 使用 pymysql 替代 mysql.connector class JCB_efficient_car_pickup: def __init__(self): # 使用 pymysql 连接数据库 self.conn = pymysql.connect( host=Config.JCB_CONN_host, database=Config.JCB_CONN_INFO_database, user=Config.JCB_CONN_INFO_user, password=Config.JCB_CONN_INFO_password, # charset='utf8mb4', # 设置字符集以避免编码问题 # cursorclass=pymysql.cursors.DictCursor # 返回字典形式的结果 ) def get_jcb_details(self, days_back=1): """ 从固定的数据库中获取前几天的NGV明细。 参数 `days_back` 表示相对于今天的天数偏移量,默认为1(即前一天)。 返回包含NGV明细的pandas DataFrame。 """ try: # 获得连接并创建游标 cursor = self.conn.cursor() # 获取指定天数前的日期 # now_time = datetime.now() # target_time = now_time + timedelta(days=-days_back) target_date_id = "接车宝" # 获取目标日期 # SQL 查询语句 sql = f""" SELECT * FROM jdy_hs_holo_dws_sales_magic_box_ngv_d WHERE 产品名称 = '{target_date_id}'; """ # 执行查询并获取结果 cursor.execute(sql) rows = cursor.fetchall() # pymysql 的 DictCursor 会返回字典列表 # 将结果转换为 DataFrame if rows: # 如果有数据 data_NGV = pd.DataFrame(rows) else: # 如果没有数据,返回空 DataFrame data_NGV = pd.DataFrame() # 尝试自动解析日期时间字符串 time_format = "%Y-%m-%d %H:%M:%S" if 'saas_create_time' in data_NGV.columns: data_NGV['saas_create_time'] = pd.to_datetime(data_NGV['saas_create_time'], format=time_format, errors='coerce') data_NGV['saas_create_time'] = data_NGV['saas_create_time'].dt.strftime('%Y-%m-%d') # 关闭游标 cursor.close() return data_NGV except Exception as e: print(f"Error occurred: {e}") return None if __name__ == "__main__": start = JCB_efficient_car_pickup() result = start.get_jcb_details(days_back=1) if result is not None: print(result.head()) # 打印前几行数据