2011-07-12 95 views
1

所以我有一個類定義如下:插入用的SQLAlchemy

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(80), unique=True) 
    email = db.Column(db.String(120), unique=True) 
    hashed_password = db.Column(db.String(100)) 
    friends = db.relationship('User', 
    backref='user', lazy='dynamic') 


    def __init__(self, username, email, hashed_password): 
    self.username = username 
    self.email = email 
    self.hashed_password = hashed_password 
    def __repr__(self): 
    return '<User %r>' % self.username 

從本質上講,我希望每個用戶有用戶(他們的朋友)的列表,但我似乎不能,如果這找出是建立這種關係的正確方法,並且如果看起來合理,我將如何將新用戶作爲朋友插入到另一個給定用戶的此列表中?

回答

2

您需要從數據庫模式透視圖中查看您的問題,然後編寫SQLAlchemy代碼來生成該模式。這一點很重要,因爲SA從模式生成中抽象出很少,並且ORM是一個單獨的組件(這是SQLAlchemy的最佳方面之一)。使用聲明性擴展並不會使這種區分消失。

具體而言,您聲明瞭一個relationship,它是一個ORM構造,沒有任何基礎列和外鍵約束。你需要做的是:

  1. 定義模式,與Table S,Column S和Constraint小號
  2. 定義爲結Python類一起

在這種情況下,relationship,你想用戶之間的多對多關係,所以您需要一個輔助表(至少)兩列,這兩個表都是用戶表的外鍵。這種情況是well covered by the SQLAlchemy docs,包括教程。

+0

同意。如果你的團隊有DBA,你應該諮詢DBA。 – wberry