Python sqlalchemy中具有额外字段的自引用数据库
我想使用Flask和SQLAlchemy为我的消息传递系统编写一个自引用数据库结构。 表格非常简单:Python sqlalchemy中具有额外字段的自引用数据库,python,sqlalchemy,Python,Sqlalchemy,我想使用Flask和SQLAlchemy为我的消息传递系统编写一个自引用数据库结构。 表格非常简单: class User(db.Model): __tablename__ = 'user' id = Column(Integer, primary_key=True) messages = db.relationship(...) def addMessage (self, friend, message): ... self.mes
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)
我想知道与我的用户表的关系如何?
如何在消息表中插入数据
这是我在用户表中作为关系写的内容,但它不起作用:
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)
如果您能告诉我如何在消息表中插入数据,我将不胜感激。我举了一个例子,您标记了sqlalchemy,但它实际上是两者的混合体。。。尝试包含完整的模型文件,而忽略您的函数ofc