""" 給与システムデータベース初期化スクリプト Payroll Database Initialization Script """ import psycopg import os from dotenv import load_dotenv # 環境変数を読み込む load_dotenv() # データベース接続文字列を構築 DB_HOST = os.getenv("DB_HOST", "192.168.0.61") DB_PORT = os.getenv("DB_PORT", "55432") DB_NAME = os.getenv("DB_NAME", "njts_acct") DB_USER = os.getenv("DB_USER", "njts_app") DB_PASSWORD = os.getenv("DB_PASSWORD", "njts_app2025") DATABASE_URL = f"postgresql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}" def create_payroll_database(): """SQLファイルを実行してデータベースを初期化""" # SQLファイルのパスを取得 import os script_dir = os.path.dirname(os.path.abspath(__file__)) sql_file = os.path.join(script_dir, 'sql', 'payroll_schema_complete.sql') # SQLファイルを読み込む with open(sql_file, 'r', encoding='utf-8') as f: sql_script = f.read() try: # データベースに接続 print(f"データベースに接続中: {DATABASE_URL}") conn = psycopg.connect(DATABASE_URL) # トランザクションを開始 with conn: with conn.cursor() as cur: # SQLスクリプトを実行 print("SQLスクリプトを実行中...") cur.execute(sql_script) print("✅ データベースの初期化が完了しました!") # テーブル一覧を確認 cur.execute(""" SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' ORDER BY table_name """) tables = cur.fetchall() print("\n作成されたテーブル:") for table in tables: print(f" - {table[0]}") # 保険料率データを確認 cur.execute("SELECT COUNT(*) FROM insurance_rates") count = cur.fetchone()[0] print(f"\n保険料率データ: {count}件") conn.close() print("\n✅ データベース初期化が正常に完了しました!") except Exception as e: print(f"\n❌ エラーが発生しました: {e}") print(f"\nエラーの詳細: {type(e).__name__}") raise if __name__ == "__main__": create_payroll_database()