| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import pymysql
- from .config import settings
- def get_connection():
- return pymysql.connect(
- host=settings.db_host,
- port=settings.db_port,
- user=settings.db_user,
- password=settings.db_password,
- database=settings.db_name,
- charset="utf8mb4",
- cursorclass=pymysql.cursors.DictCursor,
- connect_timeout=settings.db_connect_timeout,
- read_timeout=30,
- write_timeout=30,
- autocommit=True,
- )
- _ANNOTATION_TABLE_DDL = """
- CREATE TABLE IF NOT EXISTS wave_annotation (
- id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '标注ID',
- wave_file_id BIGINT UNSIGNED NOT NULL COMMENT '所属波形文件ID(wave_file.id)',
- label VARCHAR(8) NOT NULL COMMENT '样本类型:正常 / 异常',
- period_start INT NOT NULL COMMENT '起始周期编号',
- period_end INT NOT NULL COMMENT '结束周期编号(含)',
- sample_index_start INT NOT NULL COMMENT '起始采样点索引',
- sample_index_end INT NOT NULL COMMENT '结束采样点索引(含)',
- created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
- PRIMARY KEY (id),
- KEY idx_wave_file (wave_file_id)
- ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '波形标注索引表';
- """
- def ensure_annotation_table() -> None:
- with get_connection() as connection:
- with connection.cursor() as cursor:
- cursor.execute(_ANNOTATION_TABLE_DDL)
- _LABEL_TABLE_DDL = """
- CREATE TABLE IF NOT EXISTS compressor_label (
- id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '标签ID',
- source_type VARCHAR(32) NOT NULL COMMENT 'vibration/oil_pressure/temperature/pressure_wave/pks_manual',
- origin VARCHAR(16) NOT NULL DEFAULT 'manual' COMMENT 'algorithm/manual/imported',
- target_type VARCHAR(16) NOT NULL COMMENT 'wave_file/pks',
- target_id BIGINT UNSIGNED NULL COMMENT 'wave_file.id',
- target_key VARCHAR(200) NOT NULL COMMENT '通道+目标标识',
- channel_key VARCHAR(200) NOT NULL COMMENT '子图通道键',
- segment_key VARCHAR(64) NULL COMMENT '算法原始段分组键',
- unit VARCHAR(16) NOT NULL COMMENT '机组号,如 7',
- device_code VARCHAR(64) NULL COMMENT '如 7#',
- device_part VARCHAR(200) NULL COMMENT '如 7号机组一缸 / 7号机',
- device_point VARCHAR(200) NULL COMMENT 'wave 点位或 PKS 指标名',
- metric_key VARCHAR(64) NULL COMMENT 'PKS 列名,如 YSJ_11',
- metric_label VARCHAR(200) NULL COMMENT 'PKS 指标中文名',
- start_time DATETIME NOT NULL COMMENT '标签段起点',
- end_time DATETIME NOT NULL COMMENT '标签段终点(不含)',
- algorithm_start DATETIME NULL COMMENT '算法原始段起点',
- algorithm_end DATETIME NULL COMMENT '算法原始段终点',
- label_type VARCHAR(32) NOT NULL COMMENT '轻微/异常/严重异常',
- label_subtype VARCHAR(64) NULL COMMENT '振动侧/温度部位/方向等',
- severity TINYINT NULL COMMENT '1轻微/2异常/3严重异常',
- confirm_status VARCHAR(16) NOT NULL DEFAULT '未确认' COMMENT '未确认/已确认/人工否决',
- usable_for_train TINYINT(1) NOT NULL DEFAULT 1,
- source_file VARCHAR(500) NULL,
- source_row VARCHAR(64) NULL COMMENT '周期编号等',
- algorithm_version VARCHAR(64) NULL,
- features_json MEDIUMTEXT NULL COMMENT '算法原始属性',
- note VARCHAR(1000) NULL,
- created_by VARCHAR(64) NULL,
- updated_by VARCHAR(64) NULL,
- created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
- updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- deleted_at DATETIME NULL,
- PRIMARY KEY (id),
- UNIQUE KEY uk_segment (segment_key),
- KEY idx_target_time (target_key, start_time, end_time),
- KEY idx_channel_time (channel_key, start_time),
- KEY idx_unit_time (unit, start_time),
- KEY idx_source (source_type, origin)
- ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '统一训练标签表';
- """
- def ensure_label_table() -> None:
- with get_connection() as connection:
- with connection.cursor() as cursor:
- cursor.execute(_LABEL_TABLE_DDL)
|