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

159 lines
6.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 python
"""
old_rogdb構造分析データ移行準備スクリプト
old_rogdbの構造を詳細に分析し、rogdbへの移行計画を立てる
"""
import os
import sys
import django
import psycopg2
if __name__ == '__main__':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
django.setup()
from django.conf import settings
print("=== old_rogdb構造分析 ===")
# old_rogdb直接接続設定
old_db_config = {
'host': 'postgres-db',
'database': 'old_rogdb',
'user': 'admin',
'password': 'admin123456',
'port': 5432
}
try:
# old_rogdbに直接接続
old_conn = psycopg2.connect(**old_db_config)
old_cursor = old_conn.cursor()
print("✅ old_rogdb接続成功")
print("\\n=== 1. old_rogdb rog_entry構造分析 ===")
old_cursor.execute("""
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_name = 'rog_entry' AND table_schema = 'public'
ORDER BY ordinal_position;
""")
old_entry_columns = old_cursor.fetchall()
print("old_rogdb.rog_entry 構造:")
for col_name, data_type, nullable, default in old_entry_columns:
print(f" - {col_name}: {data_type} {'(NULL可)' if nullable == 'YES' else '(NOT NULL)'} {f'[default: {default}]' if default else ''}")
# old_rogdb rog_entry データ確認
old_cursor.execute("SELECT COUNT(*) FROM rog_entry;")
old_entry_count = old_cursor.fetchone()[0]
print(f"\\nold_rogdb.rog_entry データ件数: {old_entry_count}")
# サンプルデータ確認
old_cursor.execute("SELECT * FROM rog_entry LIMIT 3;")
old_entry_samples = old_cursor.fetchall()
print("\\nサンプルデータ最初の3件:")
for i, row in enumerate(old_entry_samples):
print(f" Row {i+1}: {row}")
print("\\n=== 2. old_rogdb rog_team構造分析 ===")
old_cursor.execute("""
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_name = 'rog_team' AND table_schema = 'public'
ORDER BY ordinal_position;
""")
old_team_columns = old_cursor.fetchall()
print("old_rogdb.rog_team 構造:")
for col_name, data_type, nullable, default in old_team_columns:
print(f" - {col_name}: {data_type} {'(NULL可)' if nullable == 'YES' else '(NOT NULL)'} {f'[default: {default}]' if default else ''}")
old_cursor.execute("SELECT COUNT(*) FROM rog_team;")
old_team_count = old_cursor.fetchone()[0]
print(f"\\nold_rogdb.rog_team データ件数: {old_team_count}")
print("\\n=== 3. old_rogdb rog_member構造分析 ===")
try:
old_cursor.execute("""
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_name = 'rog_member' AND table_schema = 'public'
ORDER BY ordinal_position;
""")
old_member_columns = old_cursor.fetchall()
if old_member_columns:
print("old_rogdb.rog_member 構造:")
for col_name, data_type, nullable, default in old_member_columns:
print(f" - {col_name}: {data_type} {'(NULL可)' if nullable == 'YES' else '(NOT NULL)'} {f'[default: {default}]' if default else ''}")
old_cursor.execute("SELECT COUNT(*) FROM rog_member;")
old_member_count = old_cursor.fetchone()[0]
print(f"\\nold_rogdb.rog_member データ件数: {old_member_count}")
else:
print("old_rogdb.rog_member テーブルが存在しません")
except Exception as e:
print(f"old_rogdb.rog_member 確認エラー: {e}")
print("\\n=== 4. FC岐阜関連データ詳細分析 ===")
# FC岐阜イベント確認
old_cursor.execute("""
SELECT id, event_name, start_datetime, end_datetime
FROM rog_newevent2
WHERE event_name LIKE '%FC岐阜%' OR event_name LIKE '%fc岐阜%'
ORDER BY id;
""")
fc_events = old_cursor.fetchall()
print("FC岐阜関連イベント:")
for event_id, name, start, end in fc_events:
print(f" Event {event_id}: '{name}' ({start} - {end})")
# このイベントのエントリー数確認
old_cursor.execute("SELECT COUNT(*) FROM rog_entry WHERE event_id = %s;", (event_id,))
entry_count = old_cursor.fetchone()[0]
print(f" エントリー数: {entry_count}")
# FC岐阜イベントのエントリー詳細
if fc_events:
fc_event_id = fc_events[0][0] # 最初のFC岐阜イベント
print(f"\\nFC岐阜イベント(ID:{fc_event_id})のエントリー詳細:")
old_cursor.execute("""
SELECT re.id, re.team_id, re.category_id, re.zekken_number, re.zekken_label,
rt.team_name, rc.category_name
FROM rog_entry re
JOIN rog_team rt ON re.team_id = rt.id
LEFT JOIN rog_newcategory rc ON re.category_id = rc.id
WHERE re.event_id = %s
ORDER BY re.zekken_number
LIMIT 10;
""", (fc_event_id,))
fc_entry_details = old_cursor.fetchall()
for entry_id, team_id, cat_id, zekken, label, team_name, cat_name in fc_entry_details:
print(f" Entry {entry_id}: Team {team_id}({team_name}) - ゼッケン{zekken} - {cat_name}")
print("\\n=== 5. 移行計画 ===")
print("移行が必要なテーブル:")
print(" 1. old_rogdb.rog_team → rogdb.rog_team")
print(" 2. old_rogdb.rog_entry → rogdb.rog_entry")
print(" 3. old_rogdb.rog_member → rogdb.rog_member (存在する場合)")
print("\\n注意点:")
print(" - イベントはrog_newevent2を使用")
print(" - 外部キー制約の整合性確保")
print(" - データ型の変換(必要に応じて)")
print(" - 重複データの回避")
old_cursor.close()
old_conn.close()
except Exception as e:
print(f"❌ エラーが発生しました: {e}")
import traceback
traceback.print_exc()