73 lines
2.5 KiB
Python
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()
|