【问题标题】:SQLAlchemy relationship errorSQLAlchemy 关系错误
【发布时间】:2015-04-08 07:13:24
【问题描述】:

我确实有这 2 个类和数据库模型试图建立一个一对多的关系:

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

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    UserBTuser_id 属性之间已经存在 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'))
    

    【讨论】:

    • 是的,它像你提议的那样工作,但我试图在 sqlalchemy.org 上实现类似的东西,见上文。
    【解决方案2】:

    现在我明白了……

    这是错误的:

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

    现在可以了!

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 1970-01-01
      • 2020-04-15
      • 2014-06-26
      • 1970-01-01
      • 2016-03-09
      • 2020-04-14
      • 2013-03-10
      • 1970-01-01
      相关资源
      最近更新 更多