使用SQLAlchemy插入

时间:2011-07-12 00:03:03

标签: python 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

基本上,我希望每个用户都有一个用户列表(他们的朋友),但我似乎无法确定这是否是建立这种关系的正确方法,如果看起来合理,我该怎么办?关于将新用户作为朋友插入此列表中的其他用户?

1 个答案:

答案 0 :(得分:2)

您需要从数据库模式角度查看问题,然后编写SQLAlchemy代码以生成该架构。这很重要,因为SA很少抽象出模式生成,而ORM是一个单独的组件(这是SQLAlchemy最好的方面之一)。使用声明性扩展不会使这种区别消失。

具体来说,您声明的是relationship,这是一个ORM构造,没有任何基础列和外键约束。你需要做的是:

  1. 使用Table s,ColumnConstraint s
  2. 定义架构
  3. 定义将Python类绑定在一起的relationship
  4. 在这种情况下,您需要用户之间的多对多关系,因此您需要一个具有(至少)两列的辅助表,这两个列都是users表的外键。这个案例是well covered by the SQLAlchemy docs,包括教程。