AssetPilot OrangePi 5 Pluse Server-First Commit
This commit is contained in:
128
asset_pilot_docker/init_db.py
Executable file
128
asset_pilot_docker/init_db.py
Executable file
@@ -0,0 +1,128 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
데이터베이스 초기화 스크립트
|
||||
PostgreSQL 데이터베이스에 테이블을 생성하고 기본 데이터를 삽입합니다.
|
||||
"""
|
||||
import sys
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
|
||||
# 환경 변수 로드
|
||||
load_dotenv()
|
||||
|
||||
# app 모듈 import를 위한 경로 추가
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
from app.models import Base, Asset, UserAsset, AlertSetting
|
||||
from app.database import DATABASE_URL
|
||||
import json
|
||||
|
||||
def init_database():
|
||||
"""데이터베이스 초기화"""
|
||||
print("🔧 데이터베이스 초기화 시작...")
|
||||
|
||||
try:
|
||||
# 엔진 생성
|
||||
engine = create_engine(DATABASE_URL, echo=True)
|
||||
|
||||
# 테이블 생성
|
||||
print("\n📋 테이블 생성 중...")
|
||||
Base.metadata.create_all(bind=engine)
|
||||
print("✅ 테이블 생성 완료")
|
||||
|
||||
# 세션 생성
|
||||
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
||||
db = SessionLocal()
|
||||
|
||||
try:
|
||||
# 자산 마스터 데이터 초기화
|
||||
print("\n📊 자산 마스터 데이터 초기화 중...")
|
||||
assets_data = [
|
||||
("XAU/USD", "금/달러", "귀금속"),
|
||||
("XAU/CNY", "금/위안", "귀금속"),
|
||||
("XAU/GBP", "금/파운드", "귀금속"),
|
||||
("USD/DXY", "달러인덱스", "환율"),
|
||||
("USD/KRW", "달러/원", "환율"),
|
||||
("BTC/USD", "비트코인/달러", "암호화폐"),
|
||||
("BTC/KRW", "비트코인/원", "암호화폐"),
|
||||
("KRX/GLD", "금 현물", "귀금속"),
|
||||
("XAU/KRW", "금/원", "귀금속"),
|
||||
]
|
||||
|
||||
for symbol, name, category in assets_data:
|
||||
existing = db.query(Asset).filter(Asset.symbol == symbol).first()
|
||||
if not existing:
|
||||
asset = Asset(symbol=symbol, name=name, category=category)
|
||||
db.add(asset)
|
||||
print(f" ✓ {symbol} ({name}) 추가")
|
||||
else:
|
||||
print(f" - {symbol} 이미 존재")
|
||||
|
||||
db.commit()
|
||||
print("✅ 자산 마스터 데이터 초기화 완료")
|
||||
|
||||
# 사용자 자산 초기화
|
||||
print("\n👤 사용자 자산 데이터 초기화 중...")
|
||||
assets = db.query(Asset).all()
|
||||
for asset in assets:
|
||||
existing = db.query(UserAsset).filter(UserAsset.asset_id == asset.id).first()
|
||||
if not existing:
|
||||
user_asset = UserAsset(
|
||||
asset_id=asset.id,
|
||||
previous_close=0,
|
||||
average_price=0,
|
||||
quantity=0
|
||||
)
|
||||
db.add(user_asset)
|
||||
print(f" ✓ {asset.symbol} 사용자 데이터 추가")
|
||||
else:
|
||||
print(f" - {asset.symbol} 사용자 데이터 이미 존재")
|
||||
|
||||
db.commit()
|
||||
print("✅ 사용자 자산 데이터 초기화 완료")
|
||||
|
||||
# 알림 설정 초기화
|
||||
print("\n🔔 알림 설정 초기화 중...")
|
||||
default_settings = {
|
||||
"급등락_감지": False,
|
||||
"급등락_임계값": 3.0,
|
||||
"목표수익률_감지": False,
|
||||
"목표수익률": 10.0,
|
||||
"특정가격_감지": False,
|
||||
"금_목표가격": 100000,
|
||||
"BTC_목표가격": 100000000,
|
||||
}
|
||||
|
||||
for key, value in default_settings.items():
|
||||
existing = db.query(AlertSetting).filter(AlertSetting.setting_key == key).first()
|
||||
if not existing:
|
||||
setting = AlertSetting(setting_key=key, setting_value=json.dumps(value))
|
||||
db.add(setting)
|
||||
print(f" ✓ {key}: {value}")
|
||||
else:
|
||||
print(f" - {key} 이미 존재")
|
||||
|
||||
db.commit()
|
||||
print("✅ 알림 설정 초기화 완료")
|
||||
|
||||
print("\n🎉 데이터베이스 초기화 완료!")
|
||||
print("\n다음 명령으로 서버를 시작하세요:")
|
||||
print(" python main.py")
|
||||
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
except Exception as e:
|
||||
print(f"\n❌ 오류 발생: {e}")
|
||||
print("\n문제 해결 방법:")
|
||||
print("1. PostgreSQL이 실행 중인지 확인하세요:")
|
||||
print(" sudo systemctl status postgresql")
|
||||
print("\n2. 데이터베이스가 생성되었는지 확인하세요:")
|
||||
print(" sudo -u postgres psql -c '\\l'")
|
||||
print("\n3. .env 파일의 DATABASE_URL이 올바른지 확인하세요")
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
init_database()
|
||||
Reference in New Issue
Block a user