AssetPilot OrangePi 5 Pluse Server-First Commit
This commit is contained in:
74
asset_pilot_docker/import_csv.py
Executable file
74
asset_pilot_docker/import_csv.py
Executable file
@@ -0,0 +1,74 @@
|
||||
#!/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)
|
||||
Reference in New Issue
Block a user