75 lines
2.6 KiB
Python
Executable File
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)
|