67 lines
2.9 KiB
Python
67 lines
2.9 KiB
Python
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")
|