2015-02-08 66 views
0

我确实有这2个calsses ALS DB模式试图将1 buidl许多关系:SQLAlchemy的关系错误

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' 

有什么想法?

编辑

我其实是想通过user_id财产才达到类似的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 

回答

0

已经有UserBT之间的关系FK的例子的东西,所以你不能创建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')) 
+0

是的,它像你的建议一样工作,但我试图在sqlalchemy.org上实现类似上面的内容。 – Kev 2015-02-10 18:40:05

0

现在我知道了......

这是错误的:

用户= db.relationship( “用户”,backref = db.backref( 'bt_ids',ORDER_BY = ID))

现在它的工作!