#!/usr/bin/env python """ マイグレーション履歴リセットスクリプト rogアプリのマイグレーション履歴をクリアして、新しいシンプルマイグレーションを適用 """ import os import sys import django from django.core.management import execute_from_command_line if __name__ == '__main__': os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') django.setup() from django.db import connection from django.core.management.color import no_style print("=== マイグレーション履歴のクリア ===") # データベース接続を取得 cursor = connection.cursor() try: # rogアプリのマイグレーション履歴をクリア print("rogアプリのマイグレーション履歴を削除中...") cursor.execute("DELETE FROM django_migrations WHERE app = 'rog';") print("✅ rogアプリのマイグレーション履歴を削除しました") # コミット connection.commit() print("\n=== マイグレーション状態確認 ===") # マイグレーション状態を確認 execute_from_command_line(['manage.py', 'showmigrations', 'rog']) print("\n=== 新しいマイグレーションを偽装適用 ===") # 依存関係チェックを無視してマイグレーションを偽装適用 try: # まず --run-syncdb で既存のテーブル構造を認識させる execute_from_command_line(['manage.py', 'migrate', '--run-syncdb']) except Exception as sync_error: print(f"syncdb エラー(継続): {sync_error}") # マイグレーション履歴に直接レコードを挿入 print("マイグレーション履歴を直接挿入中...") # 新しいカーソルを作成 with connection.cursor() as new_cursor: new_cursor.execute(""" INSERT INTO django_migrations (app, name, applied) VALUES ('rog', '0001_simple_initial', NOW()) ON CONFLICT DO NOTHING; """) connection.commit() print("✅ マイグレーション履歴を挿入しました") print("\n=== 最終確認 ===") # 最終確認 execute_from_command_line(['manage.py', 'showmigrations']) except Exception as e: print(f"❌ エラーが発生しました: {e}") connection.rollback() finally: cursor.close()