This commit is contained in:
z66
2025-08-12 13:43:10 +08:00
commit d5e60e9014
122 changed files with 171837 additions and 0 deletions
@@ -0,0 +1,72 @@
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()) # 打印前几行数据