SQLAlchemy - 使用user_id初始化角色

问题描述 投票:0回答:1

这是我的播放列表模型,使用“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,
       }

我想初始化我所有传递SQALchemyuser_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__()的最佳方式是什么?这是推荐的吗?

python sqlalchemy flask-sqlalchemy
1个回答
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),以便仍然执行基础构造函数中的逻辑。

希望有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.