159 lines
6.6 KiB
Python
159 lines
6.6 KiB
Python
#!/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()
|