Files
AssetPilot/asset_pilot_docker/import_csv.py

75 lines
2.6 KiB
Python
Executable File

#!/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 <csv_file_path>")
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)