""" 数据种子脚本:重置指定用户密码为 bcrypt 哈希。 用法: python scripts/seed.py admin 123456 # 重置 admin 用户密码为 123456 python scripts/seed.py admin 123456 3 # 指定用户 ID 3 """ import argparse import os import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) def main(): parser = argparse.ArgumentParser(description="重置用户密码") parser.add_argument("username", help="用户名") parser.add_argument("password", nargs="?", default="123456", help="新密码(默认 123456)") parser.add_argument("user_id", nargs="?", type=int, default=None, help="用户 ID(可选,避免同名冲突)") args = parser.parse_args() from config import DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD from core.password import generate_salt, encrypt_password import pymysql salt = generate_salt() hashed = encrypt_password(args.password, salt) conn = pymysql.connect(host=DB_HOST, port=int(DB_PORT), user=DB_USERNAME, password=DB_PASSWORD, database=DB_DATABASE) cur = conn.cursor() if args.user_id: cur.execute("UPDATE fastapi_user SET salt=%s, password=%s WHERE id=%s", (salt, hashed, args.user_id)) else: cur.execute("UPDATE fastapi_user SET salt=%s, password=%s WHERE username=%s", (salt, hashed, args.username)) conn.commit() print(f"updated {cur.rowcount} row(s) for username={args.username}") cur.close() conn.close() if __name__ == "__main__": main()