Files
njts-accounting-core/backend/create_payroll_db.py
2026-01-20 11:15:49 +09:00

73 lines
2.5 KiB
Python

"""
給与システムデータベース初期化スクリプト
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()