dump_home_schema.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334
  1. # -*- coding: utf-8 -*-
  2. """确认首页统计涉及的表字段"""
  3. import re
  4. import pymysql
  5. from pathlib import Path
  6. from _root import ROOT
  7. yml = Path(str(ROOT / "yoshop-java/src/main/resources/application.yml"))
  8. pwd = re.findall(r"password:\s*(.+)", yml.read_text(encoding="utf-8"))[0].strip().strip('"\'')
  9. conn = pymysql.connect(host="192.168.1.177", port=3306, user="root", password=pwd, database="shop")
  10. cur = conn.cursor()
  11. for t in ("yoshop_order", "yoshop_user", "yoshop_order_refund"):
  12. cur.execute(
  13. "SELECT column_name, column_type FROM information_schema.columns "
  14. "WHERE table_schema='shop' AND table_name=%s ORDER BY ordinal_position", (t,))
  15. cols = cur.fetchall()
  16. print("=" * 15, t, f"({len(cols)} 字段)")
  17. print(" ", ", ".join(c for c, _ in cols))
  18. # 行数与状态分布,便于校验统计口径
  19. if t == "yoshop_order":
  20. cur.execute("SELECT COUNT(*), SUM(is_delete=0) FROM yoshop_order")
  21. print(" 行数/未删除:", cur.fetchone())
  22. cur.execute("SELECT pay_status, order_status, COUNT(*) FROM yoshop_order WHERE is_delete=0 GROUP BY pay_status, order_status")
  23. print(" pay_status×order_status:", cur.fetchall())
  24. if t == "yoshop_user":
  25. cur.execute("SELECT COUNT(*), SUM(is_delete=0), SUM(pay_money>0) FROM yoshop_user")
  26. print(" 行数/未删除/已消费:", cur.fetchone())
  27. if t == "yoshop_order_refund":
  28. cur.execute("SELECT status, COUNT(*) FROM yoshop_order_refund GROUP BY status")
  29. print(" status 分布:", cur.fetchall())
  30. conn.close()