Files
rogaining_srv/investigate_team_structure.py
2025-08-29 09:11:20 +09:00

141 lines
5.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
import os
import sys
import django
# プロジェクト設定
sys.path.append('/app')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
django.setup()
from django.db import connection
import logging
# ログ設定
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def investigate_team_table_structure():
"""チームテーブルの構造とFC岐阜問題を調査"""
print("=== Team テーブル構造とFC岐阜問題調査 ===")
with connection.cursor() as cursor:
# 1. rog_teamテーブルの構造確認
print("\n1. rog_teamテーブル構造:")
cursor.execute("""
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = 'rog_team'
ORDER BY ordinal_position;
""")
columns = cursor.fetchall()
for col in columns:
print(f" - {col[0]}: {col[1]} ({'NULL' if col[2] == 'YES' else 'NOT NULL'})")
# 2. rog_teamテーブルの総件数
print("\n2. rog_teamテーブルの状況:")
cursor.execute("SELECT COUNT(*) FROM rog_team;")
total_teams = cursor.fetchone()[0]
print(f" 総チーム数: {total_teams}")
# 3. FC岐阜イベントID:10の詳細調査
print("\n3. FC岐阜イベントID:10詳細調査:")
cursor.execute("SELECT COUNT(*) FROM rog_entry WHERE event_id = 10;")
fc_entries = cursor.fetchone()[0]
print(f" FC岐阜イベントエントリー数: {fc_entries}")
# 4. FC岐阜エントリーのサンプル表示
print("\n4. FC岐阜エントリーサンプル:")
cursor.execute("""
SELECT id, team_id, event_id, date
FROM rog_entry
WHERE event_id = 10
LIMIT 10;
""")
fc_entry_samples = cursor.fetchall()
for entry in fc_entry_samples:
print(f" Entry ID:{entry[0]}, Team ID:{entry[1]}, Event ID:{entry[2]}, Date:{entry[3]}")
# 5. FC岐阜エントリーのteam_idを調べる
print("\n5. FC岐阜エントリーのteam_id分析:")
cursor.execute("""
SELECT team_id, COUNT(*) as count
FROM rog_entry
WHERE event_id = 10
GROUP BY team_id
ORDER BY count DESC;
""")
team_id_stats = cursor.fetchall()
for stat in team_id_stats:
print(f" Team ID:{stat[0]}, エントリー数:{stat[1]}")
# 6. 実際のteam_idでチーム情報を確認
print("\n6. 実際のチーム情報確認:")
if team_id_stats:
sample_team_ids = [stat[0] for stat in team_id_stats[:5]]
for team_id in sample_team_ids:
cursor.execute("SELECT * FROM rog_team WHERE id = %s;", [team_id])
team_info = cursor.fetchone()
if team_info:
print(f" Team ID:{team_id} 存在する: {team_info}")
else:
print(f" Team ID:{team_id} 存在しない")
# 7. ゼッケン番号付きチームの確認(実際のカラム名を使用)
print("\n7. ゼッケン番号関連調査:")
if 'zekken_number' in [col[0] for col in columns]:
cursor.execute("""
SELECT COUNT(*)
FROM rog_team
WHERE zekken_number IS NOT NULL AND zekken_number != '';
""")
zekken_count = cursor.fetchone()[0]
print(f" ゼッケン番号付きチーム数: {zekken_count}")
if zekken_count > 0:
cursor.execute("""
SELECT id, zekken_number, event_id
FROM rog_team
WHERE zekken_number IS NOT NULL AND zekken_number != ''
LIMIT 10;
""")
zekken_teams = cursor.fetchall()
print(" ゼッケン番号付きチームサンプル:")
for team in zekken_teams:
print(f" Team ID:{team[0]}, Zekken:{team[1]}, Event ID:{team[2]}")
# 8. 通過審査管理画面の問題の原因を特定
print("\n8. 通過審査管理画面問題の分析:")
print(" FC岐阜イベントID:10について:")
print(f" - エントリー数: {fc_entries}")
print(f" - 関連チーム情報の確認が必要")
# 実際に存在するチームを探す
if team_id_stats:
existing_teams = []
missing_teams = []
for team_id, count in team_id_stats:
cursor.execute("SELECT COUNT(*) FROM rog_team WHERE id = %s;", [team_id])
exists = cursor.fetchone()[0] > 0
if exists:
existing_teams.append((team_id, count))
else:
missing_teams.append((team_id, count))
print(f" - 存在するチーム: {len(existing_teams)}")
print(f" - 存在しないチーム: {len(missing_teams)}")
if missing_teams:
print(" 🔴 問題発見: エントリーが参照するチームが存在しない!")
for team_id, count in missing_teams[:3]:
print(f" Missing Team ID:{team_id} ({count}エントリー)")
if __name__ == "__main__":
try:
investigate_team_table_structure()
except Exception as e:
print(f"❌ エラーが発生しました: {e}")
import traceback
traceback.print_exc()