gpt4 book ai didi

python - "where()"在 SQLAlchemy 中如何工作

转载 作者:太空宇宙 更新时间:2023-11-04 00:27:37 25 4
gpt4 key购买 nike

在学习 SQLAlchemy 时,查询中的 where() 子句就像魔术一样发挥作用,因为它可以非常自然地表达事物。但是,我无法理解为什么它会以这种方式工作。

考虑这个查询:

.where(MyTable.MyColumn == 1)

理论上,Python中传递的参数是它的值(引用在我看来可以认为是指针值),所以MyTable.MyColumn == 1被估计(作为一个值)然后传递给函数。然而,这个函数的行为就像“在执行实际查询时估计值”(即就像一个真正的 SQL WHERE 子句)。

我理解 NumPy 中的类似行为(例如 np.argwhere(myarray > 0))是通过返回在此条件下估计的每个元素的 bool 值然后对其执行操作来实现的。例如。 np.asarray([[0,1,2],[1,2,0]]) > 0 会导致 array([[False,True,True],[True ,True,False]], dtype=bool)np.argwhere() 只是对这个值进行操作。我认为 SQLAlchemy 可能使用了类似的技术,但我仍然想不出他们是如何实现的。

谁能简要解释一下为什么以及如何工作?

最佳答案

重载

我打赌 MyTable.MyColumn 会覆盖 __eq__a == b 本质上与 a.__eq__(b) 相同。

因此,MyTable.MyColumn 只需重写 __eq__ 即可返回选择器对象而不是 bool 值。

重载示例:Try It Online!

关于python - "where()"在 SQLAlchemy 中如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46920027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com