我怎样才能有一个一对多的关系并使用不同的列加入它



我正在使用 2 个模型。

class Foo(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    desc = db.Column(db.String(30))
    bars = db.relationship('Bar', back_populates='foo')

class Bar(db.Model):
    key_1 = db.Column(db.String('64'), primary_key=True)
    key_2 = db.Column(db.String('64'), primary_key=True)
    up_foo = db.Column(db.String('64'), primary_key=True)
    foo_id = Column(Integer, ForeignKey('foo.id'))
    foo = relationship('Foo', back_populates='bars')

我想做的是加入FooBar,但在场上up_fooBar表。我的查询看起来像

select * from foo f
inner join bar b on f.id = b.up_foo

但似乎无论我以哪种方式配置关系,我都会收到 2 个错误之一。首先是 SQLAlchemy 找不到任何相关的外键列。第二个是我无法映射列up_foo两次,因为它已经是主键,因此也无法将其映射为外键。

我怎样才能做到这一点?

您绝对可以指示其中一列既是复合primary key的一部分,也是foreign_key。当然,它还要求这些列属于同一类型。下面的代码应该可以正常工作:

class Foo(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    desc = db.Column(db.String(30))
    bars = db.relationship('Bar', back_populates='foo')

class Bar(db.Model):
    key_1 = db.Column(db.String(64), primary_key=True)
    key_2 = db.Column(db.String(64), primary_key=True)
    up_foo = db.Column(db.Integer, db.ForeignKey('foo.id'), primary_key=True)
    foo = db.relationship('Foo', back_populates='bars')

在这种情况下,您的查询非常简单,因为您甚至不需要指定连接条件:

q = db.session.query(Foo, Bar).join(Bar)

最新更新