SQLAlchemy关系错误

时间:2015-02-08 13:51:55

标签: python sqlalchemy

我确实有这两个calsses als DB模型试图建立一对多的关系:

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), index=True) #, unique=True)
    firstname = db.Column(db.String(50))
    lastname = db.Column(db.String(50))

    bt_ids = db.relationship("BT", order_by="BT.id", backref="user")



class BT(db.Model):
    __tablename__ = 'bt'
    id = db.Column(db.Integer, primary_key=True)
    bt_id = db.Column(db.String(255), unique=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))

    user = db.relationship("User", backref=db.backref('bt', order_by=id))

但我想我并不真正理解建立关系的方式:

ArgumentError: Error creating backref 'user' on relationship 'User.bt_ids': property of that name exists on mapper 'Mapper|BT|bt'

有什么想法吗?

编辑

我其实想要获得类似SQLAlchemy

的例子
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
    name = Column(String(50))
    fullname = Column(String(50))
    password = Column(String(12))

    **addresses = relationship("Address", order_by="Address.id", backref="user")**

    def __repr__(self):
        return "<User(name='%s', fullname='%s', password='%s')>" % (
                                self.name, self.fullname, self.password)



class Address(Base):
     __tablename__ = 'addresses'
     id = Column(Integer, primary_key=True)
     email_address = Column(String, nullable=False)
     user_id = Column(Integer, ForeignKey('users.id'))

     **user = relationship("User", backref=backref('addresses', order_by=id))**

     def __repr__(self):
         return "<Address(email_address='%s')>" % self.email_address

2 个答案:

答案 0 :(得分:0)

FKUserBT属性之间已存在user_id关系,因此您无法在BT中创建另一个名为user的关系

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), index=True) #, unique=True)
    firstname = db.Column(db.String(50))
    lastname = db.Column(db.String(50))
    bts = db.relationship("BT", order_by="BT.id", backref="user")

class BT(db.Model):
    __tablename__ = 'bt'
    id = db.Column(db.Integer, primary_key=True)
    bt_id = db.Column(db.String(255), unique=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))

答案 1 :(得分:0)

现在我明白了......

这是错的:

user = db.relationship(&#34; User&#34;,backref = db.backref(&#39; bt_ids &#39;,order_by = id))

现在有效!