SQLAlchemy-使用user_id初始化角色

时间:2019-04-24 14:56:00

标签: python sqlalchemy flask-sqlalchemy

这是我的播放列表模型,使用“ 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的最佳方法是什么?这是推荐吗?

1 个答案:

答案 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),以便基本构造函数中的逻辑仍然可以执行。

希望有帮助!