这是我的播放列表模型,使用“title”参数初始化:
class Playlist(db.Model):
"""
Model for storing playlist information belonging to a specific user
"""
__tablename__ = 'playlist'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(50))
created = db.Column(db.DateTime, default=func.now())
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
def __init__(self, title):
self.title = title
def serialize(self):
return {
'id' : self.id,
'created' : self.created,
'title': self.title,
}
我想初始化我所有传递SQALchemy
的user_id
角色,以便以这种方式查询我的数据库:
playlist = Playlist.query.join(User, User.id == Playlist.user_id).filter(
and_(Playlist.title == 'Cache', User.id == 1)).first()
我知道您可以通过id查询User
,如下所示:
User.query.get(1)
但是在user_id
Playlist
传递__init__()
的最佳方式是什么?这是推荐的吗?
通常,从db.Model
继承的默认构造函数就足够了,无需提供自己的构造函数。默认模型构造函数将获取关键字参数并将这些值分配给正确的列。
我从上面采用了你的代码并对其进行了一些调整以显示:
class User(db.Model):
__tablename__ = 'user'
name = db.Column(db.String())
class Playlist(db.Model):
"""
Model for storing playlist information belonging to a specific user
"""
__tablename__ = 'playlist'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(50))
created = db.Column(db.DateTime, default=func.now())
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
user = db.relationship("User", backref=db.backref("playlists"))
def serialize(self):
return {
'id' : self.id,
'created' : self.created,
'title': self.title,
}
user = User(name="John")
playlist = Playlist(title="My playlist", user=user)
print(playlist.user)
print(user.playlists)
当您将User的实例传递给播放列表时,SQLAlchemy将自动负责分配外键以指向该用户。
如果你仍然希望有一个特殊的播放列表构造函数,你可能想要添加super().__init__(*args, **kwargs)
,以便仍然执行基础构造函数中的逻辑。
希望有所帮助!