from extensions import db class User(db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(255), unique=True, nullable=False) password = db.Column(db.String(255), nullable=False) nickname = db.Column(db.String(100), nullable=False) user_type = db.Column(db.String(1), nullable=False) class Movie(db.Model): __tablename__ = 'movie' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(255), nullable=False) release_date = db.Column(db.String(20), nullable=True) genres = db.Column(db.String(255), nullable=True) rating_count = db.Column(db.Integer, default=0) average_rating = db.Column(db.Float, default=0.0) actor = db.Column(db.Text, nullable=True) similar_movie = db.Column(db.String(255), nullable=True) class Genre(db.Model): __tablename__ = 'genre' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), nullable=False) class CategorySearch(db.Model): __tablename__ = 'category_search' id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id', ondelete='CASCADE'), nullable=False) category_id = db.Column(db.Integer, db.ForeignKey('genre.id', ondelete='CASCADE'), nullable=False) search_times = db.Column(db.Integer, default=0) class Search(db.Model): __tablename__ = 'search' id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id', ondelete='CASCADE'), nullable=False) keyword = db.Column(db.String(255), nullable=False) search_times = db.Column(db.Integer, default=1) class Rating(db.Model): __tablename__ = 'rating' id = db.Column(db.Integer, primary_key=True) item_id = db.Column(db.Integer, nullable=False) # 指电影 ID user_id = db.Column(db.Integer, nullable=False) # 指用户 ID rating = db.Column(db.Integer, nullable=False) # 用户评分,范围 1-5 class UserDefault(db.Model): __tablename__ = 'user_default' # 与实际表名一致 user_id = db.Column(db.Integer, primary_key=True) # 用户唯一标识符 age = db.Column(db.Integer, nullable=False) # 用户年龄 gender = db.Column(db.String(1), nullable=False) # 性别,‘M’ 表示男性,‘W’ 表示女性 occupation = db.Column(db.Integer, db.ForeignKey('occupation.id'), nullable=False) # 外键,指向 occupation 表的 id # 定义关系,使用唯一的 back_populates 名称 occupation_details = db.relationship("Occupation", back_populates="user_defaults") class Occupation(db.Model): __tablename__ = 'occupation' # 与实际表名一致!! id = db.Column(db.Integer, primary_key=True) # 职业唯一标识符 name = db.Column(db.String(100), nullable=False) # 职业名称 # 定义关系,与 UserDefault 形成双向关联 user_defaults = db.relationship("UserDefault", back_populates="occupation_details")