데이터베이스의 접두사를 config.yaml 에서 받아와 자동으로 처리하도록 수정.
This commit is contained in:
@ -1,64 +1,90 @@
|
||||
# lib/db_schema.py
|
||||
from sqlalchemy import Table, Column, Date, Float, Integer, String, Text, MetaData
|
||||
import os
|
||||
import yaml
|
||||
from sqlalchemy import Table, Column, Date, Integer, String, Float, Text, MetaData, UniqueConstraint, DateTime
|
||||
from sqlalchemy.sql import func
|
||||
|
||||
BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
|
||||
CONFIG_PATH = os.path.join(BASE_DIR, 'conf', 'config.yaml')
|
||||
|
||||
with open(CONFIG_PATH, 'r', encoding='utf-8') as f:
|
||||
cfg = yaml.safe_load(f)
|
||||
|
||||
table_prefix = cfg.get('table_prefix', '')
|
||||
tables = cfg.get('tables', {})
|
||||
|
||||
def get_full_table_name(key):
|
||||
name_in_cfg = tables.get(key, '')
|
||||
if name_in_cfg:
|
||||
if name_in_cfg.startswith(table_prefix):
|
||||
return name_in_cfg
|
||||
else:
|
||||
return table_prefix + name_in_cfg
|
||||
else:
|
||||
return table_prefix + key
|
||||
|
||||
metadata = MetaData()
|
||||
|
||||
# 날짜별 메트릭
|
||||
fg_manager_static_ga4_by_date = Table(
|
||||
'fg_manager_static_ga4_by_date', metadata,
|
||||
def get_full_table_name(key):
|
||||
# config.yaml에서 tables: 항목의 실제 테이블명 가져오기
|
||||
name_in_cfg = tables.get(key, '')
|
||||
if name_in_cfg:
|
||||
# 이미 prefix 포함된 이름일 수 있으니 확인
|
||||
if name_in_cfg.startswith(table_prefix):
|
||||
return name_in_cfg
|
||||
else:
|
||||
return table_prefix + name_in_cfg
|
||||
else:
|
||||
# 기본은 prefix + key
|
||||
return table_prefix + key
|
||||
|
||||
# 테이블 변수명은 prefix 제외한 key를 그대로 사용
|
||||
ga4_by_date = Table(
|
||||
get_full_table_name('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,
|
||||
ga4_by_source = Table(
|
||||
get_full_table_name('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,
|
||||
ga4_by_medium = Table(
|
||||
get_full_table_name('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,
|
||||
ga4_by_device = Table(
|
||||
get_full_table_name('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,
|
||||
ga4_by_country = Table(
|
||||
get_full_table_name('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,
|
||||
ga4_by_city = Table(
|
||||
get_full_table_name('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,
|
||||
air = Table(
|
||||
get_full_table_name('air'), metadata,
|
||||
Column('date', Date, primary_key=True, nullable=False),
|
||||
Column('station', String(32), nullable=False), # 🔹 추가됨
|
||||
Column('station', String(32), nullable=False),
|
||||
Column('pm25', Float),
|
||||
Column('pm10', Float),
|
||||
Column('so2', Float),
|
||||
@ -67,9 +93,8 @@ fg_manager_static_air = Table(
|
||||
Column('o3', Float),
|
||||
)
|
||||
|
||||
fg_manager_static_weather = Table(
|
||||
'fg_manager_static_weather',
|
||||
metadata,
|
||||
weather = Table(
|
||||
get_full_table_name('weather'), metadata,
|
||||
Column('date', Date, primary_key=True, nullable=False),
|
||||
Column('stnId', Integer, nullable=False),
|
||||
Column('avgTa', Float),
|
||||
@ -133,8 +158,8 @@ fg_manager_static_weather = Table(
|
||||
Column('sumFogDur', Float),
|
||||
)
|
||||
|
||||
fg_manager_static_ga4 = Table(
|
||||
'fg_manager_static_ga4', metadata,
|
||||
ga4 = Table(
|
||||
get_full_table_name('ga4'), metadata,
|
||||
Column('date', Date, primary_key=True),
|
||||
Column('source', String(255), primary_key=True),
|
||||
Column('medium', String(255), primary_key=True),
|
||||
@ -146,3 +171,28 @@ fg_manager_static_ga4 = Table(
|
||||
mysql_engine='InnoDB',
|
||||
mysql_charset='utf8mb4'
|
||||
)
|
||||
|
||||
pos = Table(
|
||||
get_full_table_name('pos'), metadata,
|
||||
Column('idx', Integer, primary_key=True, autoincrement=True),
|
||||
Column('date', Date, nullable=False),
|
||||
Column('ca01', String(50), nullable=False),
|
||||
Column('ca02', String(50), nullable=False),
|
||||
Column('ca03', String(50), nullable=False),
|
||||
Column('barcode', Integer, nullable=False),
|
||||
Column('name', String(100), nullable=False),
|
||||
Column('qty', Integer, nullable=False),
|
||||
Column('tot_amount', Integer, nullable=False),
|
||||
Column('tot_discount', Integer, nullable=False),
|
||||
Column('actual_amount', Integer, nullable=False),
|
||||
UniqueConstraint('date', 'ca01', 'ca02', 'ca03', 'name', 'barcode', name='uniq_pos_composite')
|
||||
)
|
||||
|
||||
holiday = Table(
|
||||
get_full_table_name('holiday'), metadata,
|
||||
Column('date', String(8), primary_key=True, comment='날짜 (YYYYMMDD)'),
|
||||
Column('name', String(50), nullable=False, comment='휴일명'),
|
||||
Column('created_at', DateTime, server_default=func.now(), comment='등록일시'),
|
||||
Column('updated_at', DateTime, server_default=func.now(), onupdate=func.now(), comment='수정일시'),
|
||||
comment='한국천문연구원 특일정보'
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user