Files
zhaopin/skill/references/data-migration.md
T
mzl92 e0d9c4e434 初始提交: 智联简历筛选系统v10(含Hermes每日自动化层)
- 硬性预筛门槛: 外贸经验必须(仅工作经历匹配), 培养类拦截, 毕业2020-2026, 年龄<=35
- 七维评分+动态阈值+打招呼纪律
- Hermes每日自动化: daily-runner(09:30-18:00)/daily-report/enforce-cutoff/stop-tasks
- v10.4: 每累计200人自动刷新页面
- 修正: CDP端口9222(反向隧道), 通知只发私聊(防串台), hr2任务禁用
- WSL端: cdp-tunnel.sh 浏览器工人守护
2026-08-26 22:55:08 +08:00

96 lines
2.7 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据迁移:JSON 文件 → SQLite 数据库
## 迁移时间
2025年,从单人 JSON 文件存储迁移到 SQLite 数据库。
## 源结构(旧)
```
~/.hermes/data/recruitment/
├── candidates/
│ ├── a1b2c3d4e5f6.json # 单人文件,文件名 = fingerprint(MD5前12位)
│ └── ...
└── candidates_index.json # 索引文件,key = fingerprint
```
单人 JSON 文件结构:
```json
{
"fingerprint": "a1b2c3d4e5f6",
"name": "张女士",
"age": 25,
"education": "本科",
"experience": "3年经验",
"school": "郑州经贸学院",
"expected_city": "郑州",
"expected_salary": "5千-6千",
"score": 22,
"score_level": "待定",
"greeted": false,
"raw_text": "...",
"education_detail": "...",
"work_detail": "...",
"scraped_at": "2025-01-15 14:30:00"
}
```
## 目标结构(新)
SQLite 数据库 `recruitment.db`,三表结构(见 `database-schema.md`)。
## 迁移脚本要点
```python
import sqlite3, json, os, glob
db = sqlite3.connect('recruitment.db')
# 创建表(见 database-schema.md)
candidates_dir = os.path.expanduser('~/.hermes/data/recruitment/candidates')
for fp_file in glob.glob(os.path.join(candidates_dir, '*.json')):
with open(fp_file, 'r', encoding='utf-8') as f:
data = json.load(f)
db.execute("""
INSERT OR REPLACE INTO candidates
(id, name, age, education, experience, school, expected_city,
expected_salary, score, score_level, greeted, raw_text,
education_detail, work_detail, scraped_at)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
""", (
data['fingerprint'], data['name'], data.get('age'),
data.get('education'), data.get('experience'), data.get('school'),
data.get('expected_city'), data.get('expected_salary'),
data.get('score'), data.get('score_level'),
1 if data.get('greeted') else 0,
data.get('raw_text', ''), data.get('education_detail', ''),
data.get('work_detail', ''), data.get('scraped_at', '')
))
db.commit()
```
## 迁移结果
- 迁移了 84 条候选人记录
- 分布:6人推荐,52人待定,26人不推荐
- 旧 JSON 文件保留在 `candidates/` 目录作为备份
## 反向导出(SQLite → JSON)
如需从数据库导出为单人 JSON 文件:
```python
import sqlite3, json, os
db = sqlite3.connect('recruitment.db')
db.row_factory = sqlite3.Row
out_dir = 'candidates'
os.makedirs(out_dir, exist_ok=True)
for row in db.execute("SELECT * FROM candidates"):
d = dict(row)
fp = d.pop('id')
with open(os.path.join(out_dir, f'{fp}.json'), 'w', encoding='utf-8') as f:
json.dump(d, f, ensure_ascii=False, indent=2, default=str)
```