From 4fd816fa3bd18bbacd54bc432dded7e405c3706c Mon Sep 17 00:00:00 2001 From: HibiKier <775757368@qq.com> Date: Tue, 23 Dec 2025 16:47:33 +0800 Subject: [PATCH] fix: avoid null uid when creating user --- zhenxun/models/user_console.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/zhenxun/models/user_console.py b/zhenxun/models/user_console.py index aa527ef5..b4bcbd5d 100644 --- a/zhenxun/models/user_console.py +++ b/zhenxun/models/user_console.py @@ -15,7 +15,7 @@ class UserConsole(Model): """自增id""" user_id = fields.CharField(255, unique=True, description="用户id") """用户id""" - uid = fields.IntField(description="UID", unique=True, null=True) + uid = fields.IntField(description="UID", unique=True) """UID""" gold = fields.IntField(default=100, description="金币数量") """金币数量""" @@ -44,14 +44,20 @@ class UserConsole(Model): return user try: - user = await cls.create( - user_id=user_id, - defaults={ - "platform": platform, - "uid": await cls.get_new_uid(), - }, - ) - return user + # 先生成 uid,再创建,避免插入 NULL/0 触碰约束 + for _ in range(3): + try: + uid = await cls.get_new_uid() + return await cls.create( + user_id=user_id, + platform=platform, + uid=uid, + ) + except IntegrityError: + # 可能是 uid 或 user_id 竞争,重试几次 + continue + # 多次重试仍失败,按 user_id 再查一遍 + return await cls.get(user_id=user_id) except IntegrityError: return await cls.get(user_id=user_id)