[英]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.