#!/usr/bin/env python3 """ CSV 데이터 가져오기 스크립트 (Docker용) Windows 앱의 user_assets.csv 파일을 PostgreSQL로 마이그레이션 """ import sys import os import csv from sqlalchemy.orm import sessionmaker # app 모듈 import from app.database import engine from app.models import Asset, UserAsset def import_csv(csv_file): """CSV 파일에서 데이터 가져오기""" if not os.path.exists(csv_file): print(f"❌ 파일을 찾을 수 없습니다: {csv_file}") sys.exit(1) print(f"📁 CSV 파일 읽기: {csv_file}") SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) db = SessionLocal() try: with open(csv_file, 'r', encoding='utf-8') as f: reader = csv.reader(f) count = 0 for row in reader: if len(row) != 4: print(f"⚠️ 잘못된 행 형식 (무시): {row}") continue asset_symbol, prev_close, avg_price, quantity = row # 자산 찾기 asset = db.query(Asset).filter(Asset.symbol == asset_symbol).first() if not asset: print(f"⚠️ 자산을 찾을 수 없음: {asset_symbol}") continue # 사용자 자산 업데이트 user_asset = db.query(UserAsset).filter(UserAsset.asset_id == asset.id).first() if user_asset: user_asset.previous_close = float(prev_close) user_asset.average_price = float(avg_price) user_asset.quantity = float(quantity) count += 1 print(f"✓ {asset_symbol}: 전일={prev_close}, 평단={avg_price}, 수량={quantity}") else: print(f"⚠️ 사용자 자산 정보 없음: {asset_symbol}") db.commit() print(f"\n✅ {count}개 항목 가져오기 완료!") except Exception as e: print(f"❌ 오류 발생: {e}") db.rollback() finally: db.close() if __name__ == "__main__": if len(sys.argv) < 2: print("사용법: python import_csv.py ") print("예제: python import_csv.py user_assets.csv") print("\nDocker에서 사용:") print("1. docker cp user_assets.csv asset_pilot_app:/app/") print("2. docker compose exec app python import_csv.py user_assets.csv") sys.exit(1) csv_file = sys.argv[1] import_csv(csv_file)