from datetime import date, timedelta, datetime import holidays from config import Config import psycopg2 import pandas as pd class GetProvateMiniProgram(Config): def get_private_mini_program_details(self, days_back=1): """ 从固定的数据库中获取前几天的NGV明细。 参数 `days_back` 表示相对于今天的天数偏移量,默认为1(即前一天)。 返回包含NGV明细的pandas DataFrame。 """ try: # 获得连接 conn = psycopg2.connect(**self.conn) cursor = conn.cursor() # 获取指定天数前的日期 now_time = datetime.now() target_time = now_time + timedelta(days=-days_back) target_date_id = int(target_time.strftime('%Y%m%d')) # 获取目标日期 # sql语句查询 sql = f""" SELECT * FROM "public"."holo_ads_report_saas_profile_ngv_detail_d" WHERE "date_id" = '{target_date_id}' ; """ # 执行语句并获取结果集 cursor.execute(sql) rows = cursor.fetchall() all_fields = cursor.description # 执行结果转化为dataframe col = [i[0] for i in all_fields] data_NGV = pd.DataFrame(rows, columns=col) # 尝试自动解析日期时间字符串 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() conn.close() return data_NGV except Exception as e: print(f"Error occurred: {e}") return None