我想有一个用户谁可以评价不同的电影。一部电影可以有很多评级;用户可以评价很多电影。我的数据库关系如何。烧瓶sqlalchemy
我认为这将是这样的:
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer(), primary_key=True)
username = db.Column(db.String(), nullable=True, unique=True)
password = db.Column(db.String(), nullable=True)
def __init__(self, *args, **kwargs):
super(User, self).__init__(*args, **kwargs)
class Movie(db.Model):
__tablename__ = 'movies'
id = db.Column(db.Integer(), primary_key=True)
title = db.Column(db.String(), nullable=True)
release_year = db.Column(db.String(), nullable=True)
imdb_url = db.Column(db.String(), nullable=True)
poster = db.Column(db.String(), nullable=True)
description = db.Column(db.String(), nullable=True)
genre = db.Column(db.String(), nullable=True)
rating = db.Column(db.String(), nullable=True)
def __init__(self, *args, **kwargs):
super(Movie, self).__init__(*args, **kwargs)
class Rating(db.Model):
__tablename__ = 'ratings'
id = db.Column(db.Integer(), primary_key=True)
movie_id = db.Column(db.Integer(), db.ForeignKey('movies.id'))
user_id = db.Column(db.Integer(), db.ForeignKey('users.id'))
rating = db.Column(db.Float(), default='0')
user = db.relationship("User", backref=backref("ratings", order_by=id))
movie = db.relationship("Movie", backref=backref("ratings", order_by=id))
如果这是正确的,我将如何查询这些表以获得每个电影的所有用户和他们的收视率,然后生成一个大熊猫数据框的,其中的userIds所有用户都是列,所有movieIds是行,相应的评级是价值?
UserId 1 2 3 4 5 6 7 8 9 10
MovieId
1 5.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.0
3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.5 0.0
4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
5 0.0 0.0 0.0 0.0 2.0 0.0 0.0 0.0 0.0 0.0
如果用户不评价一部电影我还是希望他们在基质中,如用户数8,谁没有评价一部电影。
我可以生成上面的矩阵,但是只有评级至少有1部电影和电影的用户被评为至少一次,这两行: df1 = pd.read_sql(session.query(Rating)。声明,session.bind) print(df1.pivot(column ='movie_id',index ='user_id',values ='rating')) 但我想获得所有用户和所有电影,无论多少他们评估或评估过的次数。 – LarmadVara