first commit

This commit is contained in:
BF
2026-04-14 22:53:52 +08:00
commit b37cba8735
156 changed files with 773977 additions and 0 deletions

263
init_database.py Normal file
View File

@@ -0,0 +1,263 @@
# -*- coding: UTF-8 -*-
'''
@Project :domainScanDemo
@File :init_database.py
@IDE :PyCharm
@Author :梦伴
@Date :2026/4/9 21:20
@explain : 数据库初始化脚本
'''
import psycopg2
from loguru import logger
from app.config import config
def init_database():
"""
初始化数据库表结构
"""
try:
# 连接数据库
conn = psycopg2.connect(
host=config.DB_HOST,
port=config.DB_PORT,
database=config.DB_DATABASE,
user=config.DB_USER,
password=config.DB_PASSWORD
)
cur = conn.cursor()
logger.info("数据库连接成功")
# 创建domains表
create_domains_table = """
CREATE TABLE IF NOT EXISTS domains (
id SERIAL PRIMARY KEY,
domain VARCHAR(255) UNIQUE NOT NULL,
tld VARCHAR(50) NOT NULL,
source_type INTEGER NOT NULL,
use_status INTEGER DEFAULT 0,
detect_status INTEGER DEFAULT 0,
register_status INTEGER DEFAULT 0,
has_beian BOOLEAN DEFAULT FALSE,
company_type VARCHAR(100),
website_url VARCHAR(255),
beian_year INTEGER,
snapshot_years TEXT,
expire_date TIMESTAMP,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
"""
cur.execute(create_domains_table)
logger.info("创建domains表成功")
# 添加新字段
try:
# 添加review_status字段
cur.execute("ALTER TABLE domains ADD COLUMN IF NOT EXISTS review_status INTEGER DEFAULT 0")
# 添加detect_time字段
cur.execute("ALTER TABLE domains ADD COLUMN IF NOT EXISTS detect_time TIMESTAMP")
# 添加backlink_count字段
cur.execute("ALTER TABLE domains ADD COLUMN IF NOT EXISTS backlink_count INTEGER DEFAULT 0")
# 尝试修改has_beian字段类型
try:
# 先检查字段类型
cur.execute("SELECT data_type FROM information_schema.columns WHERE table_name = 'domains' AND column_name = 'has_beian'")
result = cur.fetchone()
if result and result[0] != 'integer':
# 先删除默认值
cur.execute("ALTER TABLE domains ALTER COLUMN has_beian DROP DEFAULT")
# 修改字段类型
cur.execute("ALTER TABLE domains ALTER COLUMN has_beian TYPE INTEGER USING CASE WHEN has_beian THEN 2 ELSE 3 END")
# 设置新的默认值
cur.execute("ALTER TABLE domains ALTER COLUMN has_beian SET DEFAULT 1")
except Exception as e:
logger.warning(f"修改has_beian字段类型失败: {e}")
logger.info("添加新字段成功")
except Exception as e:
logger.warning(f"添加新字段失败: {e}")
# 回滚当前事务
conn.rollback()
# 只添加新字段不修改has_beian字段类型
try:
# 添加review_status字段
cur.execute("ALTER TABLE domains ADD COLUMN IF NOT EXISTS review_status INTEGER DEFAULT 0")
# 添加detect_time字段
cur.execute("ALTER TABLE domains ADD COLUMN IF NOT EXISTS detect_time TIMESTAMP")
# 添加backlink_count字段
cur.execute("ALTER TABLE domains ADD COLUMN IF NOT EXISTS backlink_count INTEGER DEFAULT 0")
logger.info("添加部分新字段成功")
except Exception as e2:
logger.warning(f"添加新字段失败: {e2}")
# 添加字段注释
cur.execute("COMMENT ON COLUMN domains.id IS '主键ID'")
cur.execute("COMMENT ON COLUMN domains.domain IS '域名'")
cur.execute("COMMENT ON COLUMN domains.tld IS '顶级域名'")
cur.execute("COMMENT ON COLUMN domains.source_type IS '来源类型'")
cur.execute("COMMENT ON COLUMN domains.use_status IS '使用状态'")
cur.execute("COMMENT ON COLUMN domains.detect_status IS '检测状态'")
cur.execute("COMMENT ON COLUMN domains.register_status IS '注册状态'")
cur.execute("COMMENT ON COLUMN domains.review_status IS '人工复核状态'")
cur.execute("COMMENT ON COLUMN domains.has_beian IS '是否有备案历史'")
cur.execute("COMMENT ON COLUMN domains.company_type IS '单位性质'")
cur.execute("COMMENT ON COLUMN domains.website_url IS '网站首页网址'")
cur.execute("COMMENT ON COLUMN domains.beian_year IS '备案年份'")
cur.execute("COMMENT ON COLUMN domains.snapshot_years IS '快照年份'")
cur.execute("COMMENT ON COLUMN domains.expire_date IS '过期时间'")
cur.execute("COMMENT ON COLUMN domains.detect_time IS '检测时间'")
cur.execute("COMMENT ON COLUMN domains.create_time IS '创建时间'")
cur.execute("COMMENT ON COLUMN domains.update_time IS '更新时间'")
logger.info("添加domains表字段注释成功")
# 创建detect_tasks表
create_tasks_table = """
CREATE TABLE IF NOT EXISTS detect_tasks (
id SERIAL PRIMARY KEY,
domain_id INTEGER REFERENCES domains(id),
task_type INTEGER NOT NULL,
status INTEGER DEFAULT 0,
priority INTEGER DEFAULT 0,
retry_count INTEGER DEFAULT 0,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
"""
cur.execute(create_tasks_table)
logger.info("创建detect_tasks表成功")
# 添加字段注释
cur.execute("COMMENT ON COLUMN detect_tasks.id IS '主键ID'")
cur.execute("COMMENT ON COLUMN detect_tasks.domain_id IS '域名ID'")
cur.execute("COMMENT ON COLUMN detect_tasks.task_type IS '任务类型'")
cur.execute("COMMENT ON COLUMN detect_tasks.status IS '任务状态'")
cur.execute("COMMENT ON COLUMN detect_tasks.priority IS '优先级'")
cur.execute("COMMENT ON COLUMN detect_tasks.retry_count IS '重试次数'")
cur.execute("COMMENT ON COLUMN detect_tasks.create_time IS '创建时间'")
cur.execute("COMMENT ON COLUMN detect_tasks.update_time IS '更新时间'")
logger.info("添加detect_tasks表字段注释成功")
# 创建domain_blacklist表
create_blacklist_table = """
CREATE TABLE IF NOT EXISTS domain_blacklist (
id SERIAL PRIMARY KEY,
domain VARCHAR(255) UNIQUE NOT NULL,
reason TEXT,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
"""
cur.execute(create_blacklist_table)
logger.info("创建domain_blacklist表成功")
# 添加字段注释
cur.execute("COMMENT ON COLUMN domain_blacklist.id IS '主键ID'")
cur.execute("COMMENT ON COLUMN domain_blacklist.domain IS '域名'")
cur.execute("COMMENT ON COLUMN domain_blacklist.reason IS '黑名单原因'")
cur.execute("COMMENT ON COLUMN domain_blacklist.create_time IS '创建时间'")
logger.info("添加domain_blacklist表字段注释成功")
# 创建sensitive_words表
create_sensitive_words_table = """
CREATE TABLE IF NOT EXISTS sensitive_words (
id SERIAL PRIMARY KEY,
word VARCHAR(255) UNIQUE NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
"""
cur.execute(create_sensitive_words_table)
logger.info("创建sensitive_words表成功")
# 添加缺失的字段
try:
# 添加category字段
cur.execute("ALTER TABLE sensitive_words ADD COLUMN IF NOT EXISTS category VARCHAR(50) DEFAULT 'default'")
# 添加priority字段
cur.execute("ALTER TABLE sensitive_words ADD COLUMN IF NOT EXISTS priority INTEGER DEFAULT 1")
logger.info("添加sensitive_words表字段成功")
except Exception as e:
logger.warning(f"添加sensitive_words表字段失败: {e}")
# 添加字段注释
try:
cur.execute("COMMENT ON COLUMN sensitive_words.id IS '主键ID'")
cur.execute("COMMENT ON COLUMN sensitive_words.word IS '敏感词'")
cur.execute("COMMENT ON COLUMN sensitive_words.category IS '分类'")
cur.execute("COMMENT ON COLUMN sensitive_words.priority IS '优先级'")
cur.execute("COMMENT ON COLUMN sensitive_words.create_time IS '创建时间'")
logger.info("添加sensitive_words表字段注释成功")
except Exception as e:
logger.warning(f"添加sensitive_words表字段注释失败: {e}")
# 创建domain_detections表
create_detections_table = """
CREATE TABLE IF NOT EXISTS domain_detections (
id SERIAL PRIMARY KEY,
domain_id INTEGER REFERENCES domains(id),
baidu_history JSONB,
baidu_site JSONB,
qihu360_site JSONB,
google_site JSONB,
chinaz_info JSONB,
aizhan_info JSONB,
juziseo_info JSONB,
jucha_info JSONB,
same_url BOOLEAN,
is_chinese_title BOOLEAN,
backlink_count_gt_10 BOOLEAN,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
"""
cur.execute(create_detections_table)
logger.info("创建domain_detections表成功")
# 为已存在的domain_detections表添加新字段
try:
# 添加same_url字段
cur.execute("ALTER TABLE domain_detections ADD COLUMN IF NOT EXISTS same_url BOOLEAN")
# 添加is_chinese_title字段
cur.execute("ALTER TABLE domain_detections ADD COLUMN IF NOT EXISTS is_chinese_title BOOLEAN")
# 添加backlink_count_gt_10字段
cur.execute("ALTER TABLE domain_detections ADD COLUMN IF NOT EXISTS backlink_count_gt_10 BOOLEAN")
logger.info("为domain_detections表添加新字段成功")
except Exception as e:
logger.warning(f"为domain_detections表添加新字段失败: {e}")
# 回滚当前事务
conn.rollback()
# 添加字段注释
cur.execute("COMMENT ON COLUMN domain_detections.id IS '主键ID'")
cur.execute("COMMENT ON COLUMN domain_detections.domain_id IS '域名ID'")
cur.execute("COMMENT ON COLUMN domain_detections.baidu_history IS '百度历史'")
cur.execute("COMMENT ON COLUMN domain_detections.baidu_site IS '百度site'")
cur.execute("COMMENT ON COLUMN domain_detections.qihu360_site IS '360 site'")
cur.execute("COMMENT ON COLUMN domain_detections.google_site IS 'Google site'")
cur.execute("COMMENT ON COLUMN domain_detections.chinaz_info IS '站长之家信息'")
cur.execute("COMMENT ON COLUMN domain_detections.aizhan_info IS '爱站网信息'")
cur.execute("COMMENT ON COLUMN domain_detections.juziseo_info IS '桔子SEO信息'")
cur.execute("COMMENT ON COLUMN domain_detections.jucha_info IS '聚查信息'")
cur.execute("COMMENT ON COLUMN domain_detections.same_url IS '首网址和备案网址是否一样'")
cur.execute("COMMENT ON COLUMN domain_detections.is_chinese_title IS 'title是否简体中文'")
cur.execute("COMMENT ON COLUMN domain_detections.backlink_count_gt_10 IS '快照历史友链数量是否大于10'")
cur.execute("COMMENT ON COLUMN domain_detections.create_time IS '创建时间'")
cur.execute("COMMENT ON COLUMN domain_detections.update_time IS '更新时间'")
logger.info("添加domain_detections表字段注释成功")
# 提交事务
conn.commit()
logger.info("数据库初始化完成")
except Exception as e:
logger.error(f"数据库初始化失败: {e}")
if conn:
conn.rollback()
finally:
if cur:
cur.close()
if conn:
conn.close()
if __name__ == "__main__":
init_database()