a7c28f240d
### 데이터 로드 (100% 커버리지) - GatherTradingData.xlsx에서 20개 시트 추출 (7,495 rows) - kis_data_collection.db: data_feed 26 rows - snapshot_admin.db: 26개 테이블 (settings, account_snapshot, alpha_history 등) ### 로더 스크립트 (5개) - load_from_xlsx.py: XLSX 전체 로드 (pandas 기반) - load_settings_properly.py: settings key-value 형태 정확히 로드 - load_all_trading_data.py: JSON 부분 로드 (초기) - load_complete_trading_data.py: JSON 완전 로드 시도 (구조 문제) - verify_table_coverage.py: 테이블 커버리지 검증 ### 웹 UI 테스트 - 서버: 포트 5000에서 실행 중 - API /api/table_rows: settings 조회 완료 - 수정 기능: DB 직접 수정 확인 (orbit_start_asset_krw 250M→300M) ### WBS 완료 현황 ✓ WBS-8.1: T+20 모니터링 (2,711개 거래 기록, 목표 30개 초과 달성) ✓ WBS-9.2: 성능 최적화 (WAL 모드, 5개 인덱스) ✓ WBS-9.6: LLM Radar Phase 3-5 (5단계 구현) ### 주요 설정값 (현재) - 포트폴리오 시작 자산: 300,000,000 (수정됨) - 포트폴리오 목표 자산: 600,000,000 (수정됨) - 현재 총자산: 431,266,207 - 예수금: 13,213,373 ### 다음 단계 - WBS-9.3: NULL 정책 강제 (20% 추가) - WBS-9.7: Gitea CI/CD 백업 (20% 추가) - API 편집 기능: /api/settings/save 구현 (500 에러 해결 필요) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
75 lines
1.9 KiB
Python
75 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
settings를 dict → list로 변환해서 로드
|
|
"""
|
|
|
|
import json
|
|
import sqlite3
|
|
from pathlib import Path
|
|
|
|
def load_settings_to_db():
|
|
"""settings를 DB에 로드"""
|
|
|
|
# JSON에서 settings 로드
|
|
with open('GatherTradingData.json', encoding='utf-8') as f:
|
|
data = json.load(f)
|
|
|
|
settings_dict = data['data']['settings']
|
|
print(f"settings 타입: {type(settings_dict)}")
|
|
print(f"settings 항목: {len(settings_dict)}")
|
|
|
|
# dict → list로 변환
|
|
settings_list = []
|
|
for ordinal, (key, value) in enumerate(settings_dict.items(), start=1):
|
|
settings_list.append({
|
|
"ordinal": ordinal,
|
|
"key": key,
|
|
"value": value,
|
|
"note": ""
|
|
})
|
|
|
|
print(f"\n변환된 settings list: {len(settings_list)} 행")
|
|
print(f"첫 항목: {settings_list[0]}")
|
|
|
|
# DB에 로드
|
|
db_path = Path('src/quant_engine/snapshot_admin.db')
|
|
conn = sqlite3.connect(db_path)
|
|
cursor = conn.cursor()
|
|
|
|
# 기존 settings 삭제
|
|
cursor.execute("DROP TABLE IF EXISTS settings")
|
|
|
|
# 테이블 생성
|
|
cursor.execute("""
|
|
CREATE TABLE settings (
|
|
ordinal INTEGER,
|
|
key TEXT,
|
|
value TEXT,
|
|
note TEXT
|
|
)
|
|
""")
|
|
|
|
# 데이터 삽입
|
|
for row in settings_list:
|
|
cursor.execute(
|
|
"INSERT INTO settings (ordinal, key, value, note) VALUES (?, ?, ?, ?)",
|
|
(row['ordinal'], row['key'], row['value'], row['note'])
|
|
)
|
|
|
|
conn.commit()
|
|
|
|
# 검증
|
|
cursor.execute("SELECT COUNT(*) FROM settings")
|
|
count = cursor.fetchone()[0]
|
|
print(f"\n[OK] settings 로드 완료: {count} rows")
|
|
|
|
# 샘플 보기
|
|
cursor.execute("SELECT * FROM settings LIMIT 5")
|
|
for row in cursor.fetchall():
|
|
print(f" {row}")
|
|
|
|
conn.close()
|
|
|
|
if __name__ == "__main__":
|
|
load_settings_to_db()
|