【发布时间】:2020-12-23 16:12:03
【问题描述】:
我有两个表,Users 和 ChatSessions。 ChatSessions 有两个字段,user_id 和friend_id,它们都是Users 表的外键。
user_id 始终包含发起聊天会话的用户,friend_id 是其他用户。由于某个用户可以有他自己或他的朋友发起的聊天会话,因此他可以在各种会话中将他的 id 作为 user_id 或friend_id。
是否可以在用户表中定义关系,我可以访问该用户的所有聊天会话,无论他的 id 是在 user_id 还是friend_id 中? 像这样的:
chat_sessions = db.relationship('chat_sessions',
primaryjoin="or_(User.id==ChatSession.user_id, User.id==ChatSession.friend_id)",
backref="user")
当我尝试向用户表提交条目时收到以下错误:
ERROR main.py:76 [10.0.2.2] Unhandled Exception [93e3f515-7dd6-4e8d-b096-8239313433f2]: relationship 'chat_sessions' expects a class or a mapper argument (received: <class 'sqlalchemy.sql.schema.Table'>)
模型:
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(60), index=True, unique=True)
password = db.Column(db.String(255))
name = db.Column(db.String(100))
active = db.Column(db.Boolean(), nullable=False)
chat_sessions = db.relationship('chat_sessions',
primaryjoin="or_(User.id==ChatSession.user_id, User.id==ChatSession.friend_id)")
class ChatSession(db.Model):
__tablename__ = 'chat_sessions'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
friend_id = db.Column(db.Integer, db.ForeignKey('users.id'))
status = db.Column(db.String(50))
user = db.relationship('User', foreign_keys=[user_id])
friend = db.relationship('User', foreign_keys=[friend_id])
【问题讨论】:
标签: python sql sqlalchemy flask-sqlalchemy