From 47acbb33b4b712b768973777716dd7c401731ab0 Mon Sep 17 00:00:00 2001 From: KWON Date: Wed, 2 Jul 2025 16:25:01 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B8=B0=EB=B3=B8=ED=8C=8C=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/config.sample.yaml | 32 ++++++++++++++++++++++++++++++++ lib/__init__.py | 0 lib/db.py | 21 +++++++++++++++++++++ lib/db_schema.py | 16 ++++++++++++++++ 4 files changed, 69 insertions(+) create mode 100644 conf/config.sample.yaml create mode 100644 lib/__init__.py create mode 100644 lib/db.py create mode 100644 lib/db_schema.py diff --git a/conf/config.sample.yaml b/conf/config.sample.yaml new file mode 100644 index 0000000..3ab46a3 --- /dev/null +++ b/conf/config.sample.yaml @@ -0,0 +1,32 @@ +# 데이터베이스 접속 정보 +database: + host: localhost # DB 호스트명 (docker-compose에서 사용하는 서비스명 mariadb) + user: YOUR_DB_USER # DB 사용자명 + password: YOUR_DB_PASS # DB 비밀번호 + name: YOUR_DB_NAME # 사용할 데이터베이스 이름 + +# 기상청 API 설정 +weather_api: + service_key: YOUR_WEATHER_API_KEY # 기상청 API 서비스 키 (초단기예보, 단기예보 등) + +# 대기환경 API 설정 +air_quality_api: + service_key: YOUR_AIR_QUALITY_API_KEY # 대기환경정보 API 서비스 키 (예: 미세먼지 농도) + +# GA4 설정 +ga4: + token: YOUR_GA4_TOKEN + property_id: 123456789 # 숫자만 입력 + +# 테이블 접두어 정의 +table_prefix: fg_manager_static_ + +# 테이블명 정의 (접두어 제외) +tables: + air: air + weather: weather + ga4: ga4 + pos: pos + pos_deactivate: pos_deactivate + +debug: false # 디버그 모드 여부 (true/false) diff --git a/lib/__init__.py b/lib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lib/db.py b/lib/db.py new file mode 100644 index 0000000..a243d02 --- /dev/null +++ b/lib/db.py @@ -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() diff --git a/lib/db_schema.py b/lib/db_schema.py new file mode 100644 index 0000000..5681dcc --- /dev/null +++ b/lib/db_schema.py @@ -0,0 +1,16 @@ +# lib/db_schema.py +from sqlalchemy import Table, Column, Date, Float, MetaData + +metadata = MetaData() + +fg_manager_static_air = Table( + 'fg_manager_static_air', + metadata, + Column('date', Date, primary_key=True, nullable=False), + Column('pm25', Float), + Column('pm10', Float), + Column('so2', Float), + Column('co', Float), + Column('no2', Float), + Column('o3', Float), +)