我想有一個用戶誰可以評價不同的電影。一部電影可以有很多評級;用戶可以評價很多電影。我的數據庫關係如何。燒瓶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