我正在使用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')
我要做的是加入Foo
和Bar
,但是来自up_foo
表格的Bar
字段。我的查询看起来像
select * from foo f
inner join bar b on f.id = b.up_foo
但似乎无论我在哪种方式配置我的关系,我都会遇到2个错误之一。第一个是SQLAlchemy无法找到任何相关的外键列。第二个是我无法将列up_foo
映射两次,因为它已经是主键,因此也无法将其映射为外键。
我怎样才能做到这一点?
答案 0 :(得分:0)
您绝对可以指出其中一列既是复合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)