目標:對象有兩個屬性:第一個屬性指向一個由JSON數組支持的Python列表。第二個屬性指向第一個屬性列表中的特定索引。SQLAlchemy with Postgres:屬性返回JSONElement而不是結果
問題:上面列出的第二個屬性目前不起作用。
背景:從JSONB
導出的SQLAlchemy屬性TypeDecorator
按預期工作。嘗試索引屬性時(例如,提取數組中的第二個值),我得到JSONElement
(源自BinaryExpression
)而不是實際結果。在我的課
屬性的定義如下:
second_val_in_arr
返回JSONElement
而不是結果如預期。明確添加astext
(MyClass.values_to_hold[1].astext
)也沒有幫助。
如果我設置:
MyClass.second_val_in_arr = MyClass.values_to_hold
然後second_val_in_arr
返回實際數組預期。但是,如果我嘗試對數組執行索引操作(如上所述),那麼它突然返回一個JSONElement
。
附加信息:
MyArr
是TypeDecorator
如下:
class MyArr(TypeDecorator):
impl = JSONB
def coerce_compared_value(self, op, value):
return self.impl.coerce_compared_value(op, value)
def process_result_value(self, value, dialect):
if value:
return list(value)
else:
return list()
(注意coerce_compared_value
被明確覆蓋因爲JSON需要作爲每docs特殊邏輯的)。