데이터베이스 관련 파일을 conf 로 위치 변경

This commit is contained in:
2025-07-07 13:34:07 +09:00
parent 87acedf843
commit f6282ab5a0
2 changed files with 66 additions and 0 deletions

21
conf/db.py Normal file
View File

@ -0,0 +1,21 @@
# db.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
import yaml
def load_config(path='conf/config.yaml'):
with open(path, 'r', encoding='utf-8') as f:
return yaml.safe_load(f)
config = load_config()
db_cfg = config['database']
db_url = f"mysql+pymysql://{db_cfg['user']}:{db_cfg['password']}@{db_cfg['host']}/{db_cfg['name']}?charset=utf8mb4"
# MySQL 연결이 끊겼을 때 자동 재시도
engine = create_engine(db_url, pool_pre_ping=True)
Session = sessionmaker(bind=engine)
def get_session():
return Session()

148
conf/db_schema.py Normal file
View File

@ -0,0 +1,148 @@
# lib/db_schema.py
from sqlalchemy import Table, Column, Date, Float, Integer, String, Text, MetaData
metadata = MetaData()
# 날짜별 메트릭
fg_manager_static_ga4_by_date = Table(
'fg_manager_static_ga4_by_date', metadata,
Column('date', Date, primary_key=True),
Column('activeUsers', Integer),
Column('screenPageViews', Integer),
Column('sessions', Integer),
)
# 날짜 + 유입 소스별 세션
fg_manager_static_ga4_by_source = Table(
'fg_manager_static_ga4_by_source', metadata,
Column('date', Date, primary_key=True),
Column('sessionSource', String(255), primary_key=True),
Column('sessions', Integer),
)
# 날짜 + 유입 매체별 세션
fg_manager_static_ga4_by_medium = Table(
'fg_manager_static_ga4_by_medium', metadata,
Column('date', Date, primary_key=True),
Column('sessionMedium', String(255), primary_key=True),
Column('sessions', Integer),
)
# 날짜 + 장치 카테고리별 activeUsers
fg_manager_static_ga4_by_device = Table(
'fg_manager_static_ga4_by_device', metadata,
Column('date', Date, primary_key=True),
Column('deviceCategory', String(255), primary_key=True),
Column('activeUsers', Integer),
)
# 날짜 + 국가별 activeUsers
fg_manager_static_ga4_by_country = Table(
'fg_manager_static_ga4_by_country', metadata,
Column('date', Date, primary_key=True),
Column('country', String(255), primary_key=True),
Column('activeUsers', Integer),
)
# 날짜 + 도시별 activeUsers
fg_manager_static_ga4_by_city = Table(
'fg_manager_static_ga4_by_city', metadata,
Column('date', Date, primary_key=True),
Column('city', String(255), primary_key=True),
Column('activeUsers', Integer),
)
fg_manager_static_air = Table(
'fg_manager_static_air',
metadata,
Column('date', Date, primary_key=True, nullable=False),
Column('station', String(32), nullable=False), # 🔹 추가됨
Column('pm25', Float),
Column('pm10', Float),
Column('so2', Float),
Column('co', Float),
Column('no2', Float),
Column('o3', Float),
)
fg_manager_static_weather = Table(
'fg_manager_static_weather',
metadata,
Column('date', Date, primary_key=True, nullable=False),
Column('stnId', Integer, nullable=False),
Column('avgTa', Float),
Column('minTa', Float),
Column('minTaHrmt', String(4)),
Column('maxTa', Float),
Column('maxTaHrmt', String(4)),
Column('sumRnDur', Float),
Column('mi10MaxRn', Float),
Column('mi10MaxRnHrmt', String(4)),
Column('hr1MaxRn', Float),
Column('hr1MaxRnHrmt', String(4)),
Column('sumRn', Float),
Column('maxInsWs', Float),
Column('maxInsWsWd', Integer),
Column('maxInsWsHrmt', String(4)),
Column('maxWs', Float),
Column('maxWsWd', Integer),
Column('maxWsHrmt', String(4)),
Column('avgWs', Float),
Column('hr24SumRws', Float),
Column('maxWd', Integer),
Column('avgTd', Float),
Column('minRhm', Float),
Column('minRhmHrmt', String(4)),
Column('avgRhm', Float),
Column('avgPv', Float),
Column('avgPa', Float),
Column('maxPs', Float),
Column('maxPsHrmt', String(4)),
Column('minPs', Float),
Column('minPsHrmt', String(4)),
Column('avgPs', Float),
Column('ssDur', Float),
Column('sumSsHr', Float),
Column('hr1MaxIcsrHrmt', String(4)),
Column('hr1MaxIcsr', Float),
Column('sumGsr', Float),
Column('ddMefs', Float),
Column('ddMefsHrmt', String(4)),
Column('ddMes', Float),
Column('ddMesHrmt', String(4)),
Column('sumDpthFhsc', Float),
Column('avgTca', Float),
Column('avgLmac', Float),
Column('avgTs', Float),
Column('minTg', Float),
Column('avgCm5Te', Float),
Column('avgCm10Te', Float),
Column('avgCm20Te', Float),
Column('avgCm30Te', Float),
Column('avgM05Te', Float),
Column('avgM10Te', Float),
Column('avgM15Te', Float),
Column('avgM30Te', Float),
Column('avgM50Te', Float),
Column('sumLrgEv', Float),
Column('sumSmlEv', Float),
Column('n99Rn', Float),
Column('iscs', Text),
Column('sumFogDur', Float),
)
fg_manager_static_ga4 = Table(
'fg_manager_static_ga4', metadata,
Column('date', Date, primary_key=True),
Column('source', String(255), primary_key=True),
Column('medium', String(255), primary_key=True),
Column('deviceCategory', String(50), primary_key=True),
Column('country', String(100), primary_key=True),
Column('city', String(100), primary_key=True),
Column('activeUsers', Integer),
Column('screenPageViews', Integer),
mysql_engine='InnoDB',
mysql_charset='utf8mb4'
)