55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
直接操作数据库,为缺少 boss_id 的账号填充。
|
||
有 boss_username 的用其作为 boss_id(占位,真实 uid 需通过检测登录获取);
|
||
无 boss_username 的用 worker_id+browser_name 生成唯一标识。
|
||
用法: python scripts/fill_boss_ids_db.py [--dry-run]
|
||
"""
|
||
import os
|
||
import sys
|
||
|
||
# 项目根目录
|
||
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||
sys.path.insert(0, ROOT)
|
||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")
|
||
|
||
import django
|
||
django.setup()
|
||
|
||
from django.db.models import Q
|
||
|
||
from server.models import BossAccount
|
||
|
||
|
||
def main():
|
||
dry_run = "--dry-run" in sys.argv
|
||
if dry_run:
|
||
print("【 dry-run 模式,不实际写入 】")
|
||
|
||
qs = BossAccount.objects.filter(Q(boss_id="") | Q(boss_id__isnull=True))
|
||
total = qs.count()
|
||
if total == 0:
|
||
print("没有需要填充的账号")
|
||
return 0
|
||
|
||
updated = 0
|
||
for acc in qs:
|
||
if acc.boss_username:
|
||
new_id = str(acc.boss_username).strip()
|
||
else:
|
||
new_id = f"_{acc.worker_id}_{acc.browser_name}".replace(" ", "_")[:64]
|
||
|
||
if not dry_run:
|
||
acc.boss_id = new_id
|
||
acc.save(update_fields=["boss_id"])
|
||
updated += 1
|
||
print(f" {'[dry] ' if dry_run else ''}id={acc.id} {acc.browser_name}@{acc.worker_id} -> boss_id={new_id}")
|
||
|
||
print(f"共处理 {updated}/{total} 条")
|
||
return 0
|
||
|
||
|
||
if __name__ == "__main__":
|
||
sys.exit(main())
|