Files
getDomain/domainCheck/create_sensitive_words_table.py
2026-04-16 13:33:06 +08:00

128 lines
4.0 KiB
Python

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
'''
@Project :domainScanDemo
@File :create_sensitive_words_table.py
@IDE :PyCharm
@Author :梦伴
@Date :2026/4/10 03:30
@explain : 创建敏感词表
'''
import psycopg2
from app.config import config
def create_sensitive_words_table():
"""
创建敏感词表
"""
try:
# 连接数据库
conn = psycopg2.connect(
host=config.DB_HOST,
port=config.DB_PORT,
database=config.DB_DATABASE,
user=config.DB_USER,
password=config.DB_PASSWORD
)
print(f"成功连接到数据库: {config.DB_HOST}:{config.DB_PORT}/{config.DB_DATABASE}")
# 创建游标
cur = conn.cursor()
# 创建敏感词表
create_table_sql = """
CREATE TABLE IF NOT EXISTS sensitive_words (
id SERIAL PRIMARY KEY,
word VARCHAR(255) UNIQUE NOT NULL,
category VARCHAR(50) DEFAULT 'default',
priority INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
"""
cur.execute(create_table_sql)
print("创建敏感词表成功")
# 添加表注释
add_table_comment_sql = """
COMMENT ON TABLE sensitive_words IS '敏感词表,存储需要过滤的敏感词'
"""
cur.execute(add_table_comment_sql)
print("添加表注释成功")
# 添加字段注释
add_column_comments_sql = """
COMMENT ON COLUMN sensitive_words.id IS '主键ID';
COMMENT ON COLUMN sensitive_words.word IS '敏感词';
COMMENT ON COLUMN sensitive_words.category IS '敏感词分类';
COMMENT ON COLUMN sensitive_words.priority IS '优先级,数字越大优先级越高';
COMMENT ON COLUMN sensitive_words.created_at IS '创建时间';
COMMENT ON COLUMN sensitive_words.updated_at IS '更新时间';
"""
cur.execute(add_column_comments_sql)
print("添加字段注释成功")
# 创建索引
create_index_sql = """
CREATE INDEX IF NOT EXISTS idx_sensitive_words_word ON sensitive_words(word);
CREATE INDEX IF NOT EXISTS idx_sensitive_words_category ON sensitive_words(category);
"""
cur.execute(create_index_sql)
print("创建索引成功")
# 创建更新触发器
create_function_sql = """
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
"""
cur.execute(create_function_sql)
print("创建更新函数成功")
# 检查触发器是否存在
check_trigger_sql = """
SELECT COUNT(*) FROM pg_trigger WHERE tgname = 'update_sensitive_words_updated_at'
"""
cur.execute(check_trigger_sql)
trigger_exists = cur.fetchone()[0] > 0
if not trigger_exists:
create_trigger_sql = """
CREATE TRIGGER update_sensitive_words_updated_at
BEFORE UPDATE ON sensitive_words
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
"""
cur.execute(create_trigger_sql)
print("创建触发器成功")
else:
print("触发器已存在,跳过创建")
# 提交事务
conn.commit()
print("事务提交成功")
# 关闭游标和连接
cur.close()
conn.close()
print("连接关闭成功")
return True
except Exception as e:
print(f"创建敏感词表失败: {e}")
return False
if __name__ == "__main__":
print("开始创建敏感词表...")
success = create_sensitive_words_table()
if success:
print("敏感词表创建成功!")
else:
print("敏感词表创建失败!")