#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 한약재 샘플 데이터 추가 - 십전대보탕 구성 약재 """ import sqlite3 from datetime import datetime def get_connection(): """데이터베이스 연결""" return sqlite3.connect('database/kdrug.db') def add_herb_extended_data(): """약재 확장 정보 추가""" conn = get_connection() cursor = conn.cursor() # 십전대보탕 구성 약재들의 실제 ingredient_code 사용 herb_data = [ { 'ingredient_code': '3400H1AHM', # 인삼 'property': '온(溫)', 'taste': '감(甘), 미고(微苦)', 'meridian_tropism': '폐(肺), 비(脾), 심(心)', 'main_effects': '대보원기, 보비익폐, 생진지갈, 안신익지', 'indications': '기허증, 피로, 식욕부진, 설사, 호흡곤란, 자한, 양위, 소갈, 건망, 불면', 'dosage_range': '1~3돈(3~9g)', 'precautions': '실증, 열증자 신중 투여', 'preparation_method': '수치법: 홍삼, 백삼, 당삼 등으로 가공', 'tags': [ ('보기', 5), ('보혈', 3), ('안신', 4), ] }, { 'ingredient_code': '3007H1AHM', # 감초 'property': '평(平)', 'taste': '감(甘)', 'meridian_tropism': '심(心), 폐(肺), 비(脾), 위(胃)', 'main_effects': '화중완급, 윤폐지해, 해독', 'indications': '복통, 기침, 인후통, 소화불량, 약물중독', 'dosage_range': '1~3돈(3~9g)', 'precautions': '장기복용시 부종 주의', 'preparation_method': '자감초(炙甘草) 등', 'tags': [ ('보기', 3), ('해독', 4), ('윤조', 3), ('청열', 2), ('항염', 3), ] }, { 'ingredient_code': '3204H1AHM', # 백출 'property': '온(溫)', 'taste': '감(甘), 고(苦)', 'meridian_tropism': '비(脾), 위(胃)', 'main_effects': '건비익기, 조습이수, 지한, 안태', 'indications': '비허설사, 수종, 담음, 자한, 태동불안', 'dosage_range': '2~4돈(6~12g)', 'precautions': '음허내열자 신중', 'preparation_method': '토백출, 생백출', 'tags': [ ('보기', 4), ('이수', 4), ('건비', 5), ] }, { 'ingredient_code': '3215H1AHM', # 복령 'property': '평(平)', 'taste': '감(甘), 담(淡)', 'meridian_tropism': '심(心), 폐(肺), 비(脾), 신(腎)', 'main_effects': '이수삼습, 건비영심, 안신', 'indications': '소변불리, 수종, 설사, 불면, 심계', 'dosage_range': '3~5돈(9~15g)', 'precautions': '음허자 신중', 'preparation_method': '백복령, 적복령', 'tags': [ ('이수', 5), ('안신', 3), ('건비', 3), ] }, { 'ingredient_code': '3419H1AHM', # 작약 'property': '미한(微寒)', 'taste': '고(苦), 산(酸)', 'meridian_tropism': '간(肝), 비(脾)', 'main_effects': '양혈렴음, 유간지통, 평간양', 'indications': '혈허, 복통, 사지경련, 두훈, 월경불순', 'dosage_range': '2~4돈(6~12g)', 'precautions': '비허설사자 신중', 'preparation_method': '백작약, 적작약', 'tags': [ ('보혈', 4), ('진경', 4), ('평간', 3), ] }, { 'ingredient_code': '3475H1AHM', # 천궁 'property': '온(溫)', 'taste': '신(辛)', 'meridian_tropism': '간(肝), 담(膽), 심포(心包)', 'main_effects': '활혈행기, 거풍지통', 'indications': '혈체, 두통, 현훈, 월경불순, 복통', 'dosage_range': '1~2돈(3~6g)', 'precautions': '음허화왕자 신중', 'preparation_method': '주천궁', 'tags': [ ('활혈', 5), ('거풍', 3), ('지통', 4), ] }, { 'ingredient_code': '3105H1AHM', # 당귀 'property': '온(溫)', 'taste': '감(甘), 신(辛)', 'meridian_tropism': '간(肝), 심(心), 비(脾)', 'main_effects': '보혈활혈, 조경지통, 윤장통변', 'indications': '혈허, 월경불순, 복통, 변비, 타박상', 'dosage_range': '2~4돈(6~12g)', 'precautions': '습성설사자 신중', 'preparation_method': '주당귀, 당귀신, 당귀미', 'tags': [ ('보혈', 5), ('활혈', 4), ('윤조', 3), ] }, { 'ingredient_code': '3583H1AHM', # 황기 'property': '온(溫)', 'taste': '감(甘)', 'meridian_tropism': '폐(肺), 비(脾)', 'main_effects': '보기승양, 고표지한, 이수소종, 탈독생기', 'indications': '기허, 자한, 설사, 탈항, 수종, 창양', 'dosage_range': '3~6돈(9~18g)', 'precautions': '표실사 및 음허자 신중', 'preparation_method': '밀자황기', 'tags': [ ('보기', 5), ('승양', 4), ('고표', 4), ] }, { 'ingredient_code': '3384H1AHM', # 육계 'property': '대열(大熱)', 'taste': '감(甘), 신(辛)', 'meridian_tropism': '신(腎), 비(脾), 심(心), 간(肝)', 'main_effects': '보화조양, 산한지통, 온경통맥', 'indications': '양허, 냉증, 요통, 복통, 설사', 'dosage_range': '0.5~1돈(1.5~3g)', 'precautions': '음허화왕자, 임신부 금기', 'preparation_method': '육계심, 계피', 'tags': [ ('보양', 5), ('온리', 5), ('산한', 4), ] }, { 'ingredient_code': '3299H1AHM', # 숙지황 'property': '온(溫)', 'taste': '감(甘)', 'meridian_tropism': '간(肝), 신(腎)', 'main_effects': '자음보혈, 익정전수', 'indications': '혈허, 음허, 요슬산연, 유정, 붕루', 'dosage_range': '3~6돈(9~18g)', 'precautions': '비허설사, 담다자 신중', 'preparation_method': '숙지황 제법', 'tags': [ ('보혈', 5), ('자음', 5), ('보신', 4), ] }, ] for herb in herb_data: # herb_master_extended 업데이트 cursor.execute(""" UPDATE herb_master_extended SET property = ?, taste = ?, meridian_tropism = ?, main_effects = ?, indications = ?, dosage_range = ?, precautions = ?, preparation_method = ?, updated_at = CURRENT_TIMESTAMP WHERE ingredient_code = ? """, ( herb['property'], herb['taste'], herb['meridian_tropism'], herb['main_effects'], herb['indications'], herb['dosage_range'], herb['precautions'], herb['preparation_method'], herb['ingredient_code'] )) # 효능 태그 매핑 for tag_name, strength in herb.get('tags', []): # 태그 ID 조회 cursor.execute(""" SELECT tag_id FROM herb_efficacy_tags WHERE tag_name = ? """, (tag_name,)) tag_result = cursor.fetchone() if tag_result: tag_id = tag_result[0] # 기존 태그 삭제 cursor.execute(""" DELETE FROM herb_item_tags WHERE ingredient_code = ? AND tag_id = ? """, (herb['ingredient_code'], tag_id)) # 태그 매핑 추가 cursor.execute(""" INSERT INTO herb_item_tags (ingredient_code, tag_id, strength) VALUES (?, ?, ?) """, (herb['ingredient_code'], tag_id, strength)) print(f"✅ {herb['ingredient_code']} 데이터 추가 완료") conn.commit() conn.close() def add_prescription_rules(): """처방 배합 규칙 추가""" conn = get_connection() cursor = conn.cursor() # 몇 가지 대표적인 배합 규칙 추가 rules = [ { 'herb1': '인삼', 'herb2': '황기', 'rule_type': '상수', 'description': '보기작용 상승효과', 'clinical_note': '기허증에 병용시 효과 증대' }, { 'herb1': '당귀', 'herb2': '천궁', 'rule_type': '상수', 'description': '활혈작용 상승효과', 'clinical_note': '혈허, 혈체에 병용' }, { 'herb1': '반하', 'herb2': '생강', 'rule_type': '상수', 'description': '반하의 독성 감소, 진토작용 증강', 'clinical_note': '구토, 오심에 병용' }, { 'herb1': '감초', 'herb2': '감수', 'rule_type': '상반', 'description': '효능 상반', 'clinical_note': '병용 금지' }, { 'herb1': '인삼', 'herb2': '오령지', 'rule_type': '상외', 'description': '효능 감소', 'clinical_note': '병용시 주의' } ] for rule in rules: cursor.execute(""" INSERT OR IGNORE INTO prescription_rules (herb1_name, herb2_name, rule_type, description, clinical_notes) VALUES (?, ?, ?, ?, ?) """, (rule['herb1'], rule['herb2'], rule['rule_type'], rule['description'], rule['clinical_note'])) print(f"✅ {rule['herb1']} - {rule['herb2']} 규칙 추가") conn.commit() conn.close() def main(): print("=" * 80) print("한약재 샘플 데이터 추가 - 십전대보탕 구성 약재") print("=" * 80) try: print("\n1. 약재 확장 정보 추가 중...") add_herb_extended_data() print("\n2. 처방 배합 규칙 추가 중...") add_prescription_rules() print("\n✨ 모든 샘플 데이터가 성공적으로 추가되었습니다!") except Exception as e: print(f"\n❌ 오류 발생: {e}") import traceback traceback.print_exc() if __name__ == "__main__": main()