| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- from datetime import datetime
- from zoneinfo import ZoneInfo
- from app.models import db
- class Media(db.Model):
- """
- 媒体模型类,表示数据库中的 'media' 表。
- 该类存储与用户相关联的媒体的基本信息,如文件名、路径、文件类型、分辨率等。
- 媒体可以是图片或视频,并关联到用户。每个媒体只能属于一个用户,且可进行状态管理。
- Attributes:
- media_id (int): 媒体的唯一标识符(主键)。
- media_name (str): 媒体名称,必须唯一,不能为空。
- media_path (str): 媒体存储路径,必须唯一,不能为空。
- description (str): 媒体的描述信息(可选)。
- file_size (int): 媒体的大小(字节)。
- file_type (str): 媒体的类型,通常为图片或视频。
- resolution_width (int): 媒体的宽度(像素)。
- resolution_height (int): 媒体的高度(像素)。
- frame_count (int): 媒体的帧数(图片为 1,视频为实际帧数)。
- upload_at (datetime): 媒体的上传时间,默认为当前时间。
- updated_at (datetime): 媒体的最后更新时间,默认为当前时间,并在更新时自动更新。
- owner_id (int): 所属用户的唯一标识符(外键)。
- Relationships:
- owner (User): 一个媒体只属于一个用户,表示该媒体的所有者。
- detections (Detection): 一个媒体可以有多个检测分割记录(反向关系,表示该媒体参与的所有检测任务)。
- """
- __tablename__ = 'media'
- media_id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 媒体 ID
- media_name = db.Column(db.String(255), unique=True, nullable=False) # 媒体名称
- media_path = db.Column(db.String(255), unique=True, nullable=False) # 媒体存储路径
- description = db.Column(db.Text, default='暂无描述') # 媒体描述
- file_size = db.Column(db.Float, default=0.0) # 文件大小(KB)
- file_type = db.Column(db.String(50), nullable=False) # 文件类型(图片或视频)
- resolution_width = db.Column(db.Integer, default=0) # 分辨率宽度
- resolution_height = db.Column(db.Integer, default=0) # 分辨率高度
- frame_count = db.Column(db.Integer, default=1, nullable=False) # 帧数(图片为 1,视频为实际帧数)
- upload_at = db.Column(db.DateTime, default=lambda: datetime.now(ZoneInfo("Asia/Shanghai"))) # 上传时间
- updated_at = db.Column(db.DateTime, default=lambda: datetime.now(ZoneInfo("Asia/Shanghai")),
- onupdate=lambda: datetime.now(ZoneInfo("Asia/Shanghai"))) # 最后更新时间
- owner_id = db.Column(db.Integer, db.ForeignKey('user.user_id'), nullable=False) # 所属用户 ID(外键)
- # 设置与 User 表的关系:一份媒体文件只属于一个用户
- owner = db.relationship('User', backref=db.backref('medias', lazy=True))
- def __repr__(self):
- return (f"Media(media_id={self.media_id}, "
- f"media_name={self.media_name}, "
- f"media_path={self.media_path}, "
- f"description={self.description}, "
- f"file_size={self.file_size}, "
- f"file_type={self.file_type}, "
- f"resolution_width={self.resolution_width}, "
- f"resolution_height={self.resolution_height}, "
- f"frame_count={self.frame_count}, "
- f"upload_at={self.upload_at}, "
- f"updated_at={self.updated_at}, "
- f"owner_id={self.owner_id})")
- def to_dict(self):
- """
- 将 Media 实例转化为字典。
- """
- return {
- 'media_id': self.media_id,
- 'media_name': self.media_name,
- 'media_path': self.media_path,
- 'description': self.description,
- 'file_size': self.file_size,
- 'file_type': self.file_type,
- 'resolution_width': self.resolution_width,
- 'resolution_height': self.resolution_height,
- 'frame_count': self.frame_count,
- 'upload_at': self.upload_at,
- 'updated_at': self.updated_at,
- 'owner_id': self.owner_id
- }
|