在SQLAlchemy中查询父项的特定子项

时间:2017-11-22 15:51:00

标签: sqlalchemy querying

我试图编写一个将从父级返回一个子对象的查询。

我的模型如下:

class Parent (Base):
    __tablename__ = 'parents'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    children_id = Column(Integer, ForeignKey('children.id'))
    childern = relationship('Child', back_populates='parents')

class Child (Base):
    __tablename__ = 'children'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    parent = relationship('Parent', back_populates='children')

考虑这个例子:有三个父母和他们的孩子:

Alice: Zander, Ygrite, Xaiver
Bob: Will, Ulric, Tammy
Chris: Will, Sam, Xaiver

请注意,克里斯巧合地将他的一些孩子命名为与其他孩子相同,即使他们是不同的孩子。

如果我想特别找到克里斯的孩子Xavier,我的第一直觉就是要查询Parent Chris然后迭代他的孩子,直到我找到Xavier或查询所有名为Xavier的孩子然后迭代他们直到我找到父母克里斯的那个。

但是,此解决方案无法扩展,并且绝对不会使用SQLAlchemy的功能。

1 个答案:

答案 0 :(得分:2)

在继续研究这一挑战时,我遇到了这个问题以及公认的回应:SQLAlchery query filter on child attribute

我测试了这个查询...

var x: UInt64 = 0b1111
let index: UInt64 = 1
let lowMask: UInt64 = (1 << index) - 1
let highMask: UInt64 = ~lowMask
x = ((x & highMask) << 1) | (x & lowMask)
print(String(x, radix: 2))
// Output: 11101

......它完全符合我的要求。