2014-09-25 93 views
0

我想使用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') 
+0

如果可以的話我會很感激還告訴我如何在消息表中插入數據,例如 – 2014-09-25 10:11:47

+0

我無法在您的問題的任何地方找到實際問題。請[編輯]解釋您遇到的錯誤或您遇到的問題。 – davidism 2014-09-25 13:19:41

+0

然後您標記了flask-sqlalchemy,但它實際上是兩者的混合...試圖包含完整模型文件(省略您的函數ofc) – 2014-09-25 14:50:21

回答

0

解決此問題的工作很多,我發現有用戶表和消息表之間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)