所以我有一个如下定义的类:
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
基本上,我希望每个用户都有一个用户列表(他们的朋友),但我似乎无法确定这是否是建立这种关系的正确方法,如果看起来合理,我该怎么办?关于将新用户作为朋友插入此列表中的其他用户?
答案 0 :(得分:2)
您需要从数据库模式角度查看问题,然后编写SQLAlchemy代码以生成该架构。这很重要,因为SA很少抽象出模式生成,而ORM是一个单独的组件(这是SQLAlchemy最好的方面之一)。使用声明性扩展不会使这种区别消失。
具体来说,您声明的是relationship
,这是一个ORM构造,没有任何基础列和外键约束。你需要做的是:
Table
s,Column
和Constraint
s relationship
在这种情况下,您需要用户之间的多对多关系,因此您需要一个具有(至少)两列的辅助表,这两个列都是users表的外键。这个案例是well covered by the SQLAlchemy docs,包括教程。