我试图编写一个将从父级返回一个子对象的查询。
我的模型如下:
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的功能。
答案 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
......它完全符合我的要求。