簡體   English   中英

flask-sqlalchemy 中的自引用數據庫查詢。 社交媒體應用

[英]Self-referential database querying in flask-sqlalchemy. Social media application

我正在制作一個社交媒體 web 應用程序,我創建了一個名為 User 的 model ,它有兩個關系帖子(這工作正常)和朋友(自我引用)。 我已經遷移了數據庫,它運行良好。 我還通過數據庫瀏覽工具添加了關注者,效果很好。

friendship = db.Table(
    "friendships",
    db.Model.metadata,
    db.Column("user_id", db.Integer, db.ForeignKey("user.id"), index=True),
    db.Column("friend_id", db.Integer, db.ForeignKey("user.id")),
)

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(120))
    posts = db.relationship('Post', backref='author', lazy='dynamic')
    friends = db.relationship(
        "User",
        secondary=friendship,
        primaryjoin=id == friendship.c.user_id,
        secondaryjoin=id == friendship.c.friend_id,
    )

    def follow(self, friend):
        if friend not in self.friends:
            self.friends.append(friend)

    def unfollow(self, friend):
        if friend in self.friends:
            self.friends.remove(friend)

我寫了一個簡單的查詢來查找用戶正在關注的人。 這工作正常。 following = current_user.friends

我正在嘗試編寫一個查詢來列出關注用戶的人(類似於常見的社交媒體應用程序,如 Instagram),但我正在努力處理這個查詢。 這是我嘗試過的,但它不起作用。

followers = db.session.query(friendship).filter_by(friend_id=current_user.id)

我遇到的另一個問題是編寫查詢以查找用戶當前未關注的人。

我對數據庫不是很有經驗,這就是我在這些查詢中苦苦掙扎的原因。 提前感謝您的幫助。 我也嘗試過查看類似的帖子,但它們都不是我想要的。

您將需要編寫一個查詢以將表連接到其自身的別名版本。 SQLAlchemy 文檔

from sqlalchemy.orm import aliased

user_id = ... # id of the user whose followers you want to find

UserAlias = aliased(User)
followers = User.query.join(UserAlias.friends).with_entities(UserAlias).all()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM