Files
ProxyPool/clean_protocol_data.py
2026-01-27 21:17:36 +08:00

50 lines
1.8 KiB
Python

import asyncio
import aiosqlite
import os
async def clean_protocol_data():
"""清理数据库中协议字段异常的数据"""
db_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'db')
db_path = os.path.join(db_dir, 'proxies.sqlite')
VALID_PROTOCOLS = ['http', 'https', 'socks4', 'socks5']
async with aiosqlite.connect(db_path) as db:
# 查询异常的协议数据
async with db.execute('SELECT ip, port, protocol FROM proxies WHERE protocol NOT IN (?, ?, ?, ?)', VALID_PROTOCOLS) as cursor:
invalid_proxies = await cursor.fetchall()
if invalid_proxies:
print(f"发现 {len(invalid_proxies)} 条异常协议数据:")
for ip, port, protocol in invalid_proxies:
print(f" - {ip}:{port} (protocol={protocol})")
# 更新所有不是有效协议类型的记录为 'http'
cursor = await db.execute('''
UPDATE proxies
SET protocol = 'http'
WHERE protocol NOT IN (?, ?, ?, ?)
''', VALID_PROTOCOLS)
updated_count = cursor.rowcount
await db.commit()
print(f"\n已将 {updated_count} 条记录的协议更新为 'http'")
# 统计修复后的协议分布
print("\n修复后的协议分布:")
for protocol in VALID_PROTOCOLS:
async with db.execute('SELECT COUNT(*) FROM proxies WHERE protocol = ?', (protocol,)) as cursor:
count = (await cursor.fetchone())[0]
print(f" - {protocol}: {count}")
if __name__ == "__main__":
print("=" * 60)
print("开始清理数据库中的异常协议数据...")
print("=" * 60)
asyncio.run(clean_protocol_data())
print("=" * 60)
print("清理完成!")
print("=" * 60)