这是我的播放列表模型,使用“ 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
的{{1}}角色,以便以此方式查询数据库:
user_id
我知道您可以通过ID查询playlist = Playlist.query.join(User, User.id == Playlist.user_id).filter(
and_(Playlist.title == 'Cache', User.id == 1)).first()
,如下所示:
User
但是在User.query.get(1)
user_id
处通过 Playlist
的最佳方法是什么?这是推荐吗?
答案 0 :(得分:0)
通常,从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)
,以便基本构造函数中的逻辑仍然可以执行。
希望有帮助!