python - 使用 SQLalchemy 从表中获取用户列表

标签 python mysql sqlalchemy flask-sqlalchemy

我有一个这样的模型。

class Message(db.Model, CRUDMixin):
    id = db.Column(db.Integer, primary_key=True, nullable=False)
    from_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)
    to_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)
    from_user = db.relationship('User', foreign_keys=[from_id], uselist=False)
    to_user = db.relationship('User', foreign_keys=[to_id],
                          uselist=False)
    date = db.Column(db.TIMESTAMP(), nullable=False)
    content = db.Column(db.String(500), nullable=False)
    room_id = db.Column(db.Integer, db.ForeignKey("room.id"), nullable=False)

我想要实现的是,对于给定的user_id,我想获取该用户已向其发送消息或已从哪些用户接收消息的用户列表。

例如:

假设有 3 个用户,id 分别为 1,2,3

消息已发送

1 -> 2

2 -> 1

1 -> 3

3 -> 2

现在,对于用户 id 1,我想获取 id 2 和 3 的用户列表。对于用户 2,我想要 1 和 3。

如何实现这一目标?

提前致谢。

最佳答案

实现您所追求的目标的一种方法是合并符合您条件的用户。

user_id = 1

messaged_to = User.query.\
    join(Message, Message.to_id == User.id).\
    filter(Message.from_id == user_id)

messages_from = User.query.\
    join(Message, Message.from_id == User.id).\
    filter(Message.to_id == user_id)

query = messaged_to.union(messages_from)

关于python - 使用 SQLalchemy 从表中获取用户列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47177863/

相关文章:

mysql - 优化 Laravel Eloquent?

python - 如何在 SQLAlchemy、Flask、Python 中处理唯一数据

python - 当 INSERT 不返回任何行时,SQLAlchemy 会引发 TypeError 吗?

python - 游戏几秒后崩溃

python - 如何在 Google App Engine 上查找特定于单个 MapReduce 作业的日志?

python - 捕获程序调试事件消息

python - 如何计算 'for' 循环中的内容?

php - 同一组联接表上的 Mysql 联合

php - MYSQL 关联计数

python - 如何在 sqlalchemy 中模拟创建时间?