2026-09-21 02:52:56 +08:00
|
|
|
'''
|
|
|
|
|
1. 参数说明:
|
|
|
|
|
field_name:业务编号字段名,例如 student_no
|
|
|
|
|
prefix:业务编号前缀,例如 STU
|
|
|
|
|
db_object:已实例化的 ORM 对象,例如 stu
|
|
|
|
|
db:当前接口中的数据库 Session
|
|
|
|
|
|
|
|
|
|
2. ORM 主键统一命名为 id。
|
|
|
|
|
业务编号字段按文档命名,例如 student_no、teacher_no、class_no。
|
|
|
|
|
|
|
|
|
|
3. 必须先执行 db.add(db_object),再调用 generate_no()。
|
|
|
|
|
|
|
|
|
|
4. 主键id一定要设置成自增。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dao模块示例代码:
|
|
|
|
|
def add_student(
|
|
|
|
|
result: CreateStudent,
|
|
|
|
|
db: Session
|
|
|
|
|
):
|
|
|
|
|
stu = Student(**result.model_dump())
|
|
|
|
|
|
|
|
|
|
db.add(stu)
|
|
|
|
|
|
|
|
|
|
generate_no("student_no", "STU", stu, db)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
db.commit()
|
|
|
|
|
|
|
|
|
|
return stu
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-09-21 20:51:07 +08:00
|
|
|
def generate_no(field_name: str, prefix: str, db_object, db):
|
2026-09-21 02:52:56 +08:00
|
|
|
if getattr(db_object, field_name):
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
db.flush()
|
|
|
|
|
record_no = f"{prefix}{db_object.id:04d}"
|
|
|
|
|
setattr(db_object, field_name, record_no)
|