#!/usr/bin/env python3 # -*- coding: utf-8 -*- """导入汪礼平2026年7月微信支付流水到 finances 数据库""" import json, pymysql from datetime import datetime cfg = json.load(open('db_config.json')) conn = pymysql.connect(host=cfg['host'], port=cfg['port'], user=cfg['user'], password=cfg['password'], database=cfg['database'], charset='utf8mb4') cur = conn.cursor() MEMBER_ID = 1 # 汪礼平 def categorize(rec): txn_type, peer, goods, direction = rec[1], rec[2], rec[3], rec[4] # 转账/红包 if '转账' in txn_type or '红包' in txn_type: return '转账/红包' if ('拼多多' in peer or '抖音' in peer): return '购物' # 超市/食品/生鲜/餐饮 food_kw = ['超市', '生鲜', '好想来', '赵一鸣', '早餐', '早点', '包子', '米粉', '豆腐', '猪肉', '水果', '果林', '食品', '金 华', '粥饼', '小铺', '餐厅'] for kw in food_kw: if kw in peer or (goods and kw in goods): return '餐饮/食品' # 交通/出行 if '铁塔能源' in peer or '充电' in peer or '停车' in peer: return '交通' # 医疗 if '药' in peer or '诊所' in peer or '医院' in peer: return '医疗' # 寺/香火/宗教 if '寺' in peer: return '其他' # 其余扫码付款个人商户 -> 餐饮/食品(多数为买菜/小摊) return '餐饮/食品' # 内嵌完整数据(来自会话消息) DATA = __import__('json').loads(r'''{"headers":["交易时间","交易类型","交易对方","商品","收/支","金额(元)","支付方式","当前状态","交易单号","商户单号","备注"],"records":[["2026-07-31 19:55:44","商户消费","抖音电商商家","蟑螂蚂蚁通用杀蟑饵剂...","支出",7.9,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-31 17:52:25","商户消费","好想来","安庆宜秀区旺园小区店","支出",3.08,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-31 09:59:20","商户消费","安庆市宜秀区三城寺","安庆市宜秀区三城寺","支出",10,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-30 19:52:18","转账","杨小平 (杨平)","微信转账","支出",400,"零钱","对方已收钱","/","/","/"],["2026-07-30 19:51:14","转账","杨轩","微信转账","收入",400,"/","已存入零钱","/","/","/"],["2026-07-28 18:07:02","商户消费","拼多多平台商户","先用后付","支出",21.89,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-28 08:35:00","扫二维码付款","天顺1","二维码收款","支出",35,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-27 16:37:50","商户消费","抖音电商商家","保鲜膜套","支出",9.9,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-27 10:54:36","商户消费","贺强果林","巢尔苹果等","支出",21,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-26 10:13:36","扫二维码付款","丁韩燕","二维码收款","支出",35,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-26 09:43:19","商户消费","惠康超市","付款码支付","支出",5.22,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-26 09:34:33","扫二维码付款","红星","二维码收款","支出",736,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-25 09:59:06","商户消费","宜天鲜","宜天鲜生态农场直供会员店","支出",42,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-25 09:31:32","扫二维码付款","丁韩燕","二维码收款","支出",17,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-25 08:54:09","扫二维码付款","飘雪","二维码收款","支出",6,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-25 06:33:32","商户消费","粥饼小铺","/","支出",3.2,"零钱","支付成功","/","/","/"],["2026-07-24 09:53:38","扫二维码付款","梧桐","二维码收款","支出",4.3,"零钱","已转账","/","/","/"],["2026-07-24 07:34:44","微信红包","佳艳","/","收入",10,"/","已存入零钱","/","/","/"],["2026-07-23 14:09:03","扫二维码付款","潮贵金","二维码收款","支出",19.5,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-23 11:02:55","商户消费","安庆市宜秀区三城寺","安庆市宜秀区三城寺","支出",10,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-22 17:52:34","商户消费","铁塔能源有限公司安徽分公司","铁塔能源","支出",1.6,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-22 10:29:52","商户消费","皖商超市","付款码支付","支出",14.74,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-22 10:22:31","商户消费","杨爱美水果","杨爱美水果","支出",14.8,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-22 10:06:50","商户消费","赵一鸣","安庆市大观区辛增武食品经营部","支出",11.39,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-22 07:29:27","扫二维码付款","粱发兵","二维码收款","支出",3.5,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-22 07:28:25","商户消费","阿龙早点","/","支出",3.5,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-21 09:48:35","扫二维码付款","唐陶信","二维码收款","支出",5,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-21 08:07:24","扫二维码付款","晚星","二维码收款","支出",5,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-21 07:11:47","微信红包(单发)","发给佳艳","/","支出",100,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-21 07:11:23","微信红包(单发)","发给佳艳","/","支出",200,"零钱","支付成功","/","/","/"],["2026-07-20 18:24:05","转账","汪和平","微信转账","收入",200,"/","已存入零钱","/","/","/"],["2026-07-20 13:38:07","扫二维码付款","佰利鑫百货经营部丨宜秀店","二维码收款","支出",120,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-19 13:04:11","商户消费","抖音电商商家","染发膏","支出",19.9,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-19 12:51:50","商户消费","抖音电商商家","女包","支出",39.9,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-19 12:39:47","商户消费","抖音电商商家","百福缸钥匙扣","支出",9.9,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-19 10:01:54","扫二维码付款","桂林米粉","二维码收款","支出",15,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-18 08:53:07","商户消费","惠康超市","付款码支付","支出",111.6,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-17 10:01:57","扫二维码付款","轩记","二维码收款","支出",6.5,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-17 09:53:48","商户消费","惠康超市","付款码支付","支出",18.09,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-15 08:53:21","商户消费","惠康超市","付款码支付","支出",12.85,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-14 14:24:21","商户消费","浮生如梦","/","支出",5,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-14 08:35:53","扫二维码付款","天顺1","二维码收款","支出",35,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-13 17:37:41","商户消费","拼多多平台商户","先用后付","支出",130.9,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-13 17:37:24","商户消费","拼多多平台商户","先用后付","支出",108,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-13 17:21:38","扫二维码付款","老王","二维码收款","支出",25,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-13 17:15:33","商户消费","新皖韵生鲜超市","新皖韵生鲜超市","支出",32.3,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-13 11:28:13","商户消费","拼多多平台商户","先用后付","支出",3.76,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-13 10:55:45","扫二维码付款","晨曦","二维码收款","支出",35,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-13 10:41:19","商户消费","惠康超市","付款码支付","支出",19.81,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-13 08:16:16","商户消费","好想来","安庆宜秀区旺园小区店","支出",7.2,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-12 09:19:57","商户消费","安庆市宜秀区三城寺","安庆市宜秀区三城寺","支出",10,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-12 08:59:30","扫二维码付款","小高精品水果专卖","二维码收款","支出",29,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-12 07:59:09","转账","老公 (自然而然)","微信转账","支出",200,"安徽农信储蓄卡(8043)","对方已收钱","/","/","/"],["2026-07-12 07:38:12","扫二维码付款","老奶奶包子","二维码收款","支出",4.5,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-10 14:09:12","商户消费","拼多多平台商户","先用后付","支出",66,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-10 07:50:04","扫二维码付款","飘雪","二维码收款","支出",7,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-10 06:15:00","商户消费","二子","/","支出",7.2,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-09 11:35:54","商户消费","拼多多平台商户","先用后付","支出",39.9,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-09 07:51:39","扫二维码付款","梦想成真","二维码收款","支出",12,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-08 07:44:21","商户消费","赵一鸣","安庆市大观区辛增武食品经营部","支出",26.85,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-07 12:27:56","商户消费","拼多多平台商户","先用后付","支出",17.9,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-07 09:03:54","扫二维码付款","海之星游泳馆","二维码收款","支出",52,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-07 08:42:39","商户消费","金色华联购物中心","金色华联购物中心-大发店","支出",4.08,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-07 08:11:31","扫二维码付款","韩亚红","二维码收款","支出",2,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-06 11:10:18","商户消费","铁塔能源有限公司安徽分公司","铁塔能源","支出",1.6,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-06 07:41:19","商户消费","安庆小俩口(老面包子铺)","/","支出",6,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-05 10:50:23","扫二维码付款","乐乐奶奶","二维码收款","支出",10.7,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-05 10:46:18","扫二维码付款","平","二维码收款","支出",8.5,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-05 10:44:52","扫二维码付款","枞阳手工豆腐","二维码收款","支出",6,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-05 10:43:30","扫二维码付款","平","二维码收款","支出",11,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-05 10:41:52","扫二维码付款","晨曦","二维码收款","支出",26,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-03 10:19:40","商户消费","铁塔能源有限公司安徽分公司","铁塔能源","支出",1.6,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-03 10:00:53","商户消费","安庆安广顺电子商务有限公司","皖商超市","支出",22.93,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-02 10:27:07","扫二维码付款","卖菜朱女","二维码收款","支出",20,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-02 09:10:20","商户消费","安庆市宜秀区三城寺","安庆市宜秀区三城寺","支出",10,"安徽农信储蓄卡(8043)","支付成功","/","/","/"],["2026-07-01 10:10:59","扫二维码付款","思伟(皖味粉丝煲)","二维码收款","支出",12,"安徽农信储蓄卡(8043)","已转账","/","/","/"],["2026-07-01 08:53:07","商户消费","好想来","安庆宜秀区旺园小区店","支出",13.45,"安徽农信储蓄卡(8043)","支付成功","/","/","/"]]}''') def parse_dt(s): return datetime.strptime(s, '%Y-%m-%d %H:%M:%S') inc_count = exp_count = 0 inc_sum = 0.0 exp_sum = 0.0 cat_tot = {} for rec in DATA['records']: dt = parse_dt(rec[0]) direction = rec[4] amount = float(rec[5]) note = f"[微信] {rec[1]}|{rec[2]}|{rec[3] or '/'}" if direction == '收入': source = rec[2] cur.execute("INSERT INTO income_records (member_id, source, amount, frequency, recorded_date, note) VALUES (%s,%s,%s,%s,%s,%s)", (MEMBER_ID, source, amount, '一次性', dt.date(), note)) inc_count += 1; inc_sum += amount elif direction == '支出': cat = categorize(rec) cur.execute("INSERT INTO variable_expenses (member_id, category, amount, recorded_date, note) VALUES (%s,%s,%s,%s,%s)", (MEMBER_ID, cat, amount, dt.date(), note)) exp_count += 1; exp_sum += amount cat_tot[cat] = cat_tot.get(cat, 0) + amount conn.commit() print(f"收入 {inc_count} 笔, {inc_sum:.2f}") print(f"支出 {exp_count} 笔, {exp_sum:.2f}") print("分类:", {k: round(v,2) for k,v in sorted(cat_tot.items(), key=lambda x:-x[1])}) conn.close()