带有sqlalchemy中额外字段的自引用数据库
问题描述:
我想使用Flask和SQLAlchemy为我的邮件系统编写自引用数据库结构。 表是非常简单的:带有sqlalchemy中额外字段的自引用数据库
class User(db.Model):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
messages = db.relationship(...)
def addMessage (self, friend, message):
...
self.messages.append(friend)
return self
和消息表:
class Message (db.Model):
__tablename__ = 'message'
id = db.Column(db.Integer, primary_key=True)
emmiter_id = db.Column(db.Integer, db.ForeignKey('user.id'))
receiver_id = db.Column(db.Integer, db.ForeignKey('user.id'))
text = db.Column(db.Text)
我想知道如何将我的表格user
的关系是什么样子? 以及如何在message
表中插入数据?
这是我在user
表写的关系,但它不工作:
messages = db.relationship('User',
secondary = Message,
primaryjoin = (Message.emmiter_id == id),
secondaryjoin = (Message.receiver_id == id),
backref = db.backref('correspondence', lazy = 'dynamic'),
lazy = 'dynamic')
答
解决此问题的工作很多,我发现有用户表和消息表之间primaryjoin的解决方案。这里是工作的代码
# Messaging system table
class Message(db.Model):
__tablename__ = 'message'
emmiter_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
recipient_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
text = db.Column(db.Text, nullable=False)
和用户表所示:
class User (db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
inbox = db.relationship('Message',backref='sender', primaryjoin=id==Message.emmiter_id)
outbox = db.relationship('Message',backref='receiver', primaryjoin=id==Message.recipient_id)
,这里是如何在信息表中添加一条消息:
message = Message(text="dsf", sender=sender , receiver=receiver)
如果可以的话我会很感激还告诉我如何在消息表中插入数据,例如 – 2014-09-25 10:11:47
我无法在您的问题的任何地方找到实际问题。请[编辑]解释您遇到的错误或您遇到的问题。 – davidism 2014-09-25 13:19:41
然后您标记了flask-sqlalchemy,但它实际上是两者的混合...试图包含完整模型文件(省略您的函数ofc) – 2014-09-25 14:50:21