我的Test
表有一个JSONB列data
:
class Test(Base):
__tablename__ = 'test'
data = Column(JSONB)
典型文档有两个列表:
{'percentage': [10, 20, 50, 80, 90],
'age': [1.21, 2.65, 5.23, 8.65, 11.78]
}
使用column_property
我想要定制这两个列表,以便它可以作为字典使用。在“开放领域”Python中,这很简单:
dict(zip(Test.data['percentage'], Test.data['age']))
但是有一个column_property:
Test.data_dict = column_property(
dict(zip(Test.data['percentage'], Test.data['age']))
)
这给出了:
AttributeError:'dict'对象没有属性'label'
这实际上是否可行,应如何做?
答案 0 :(得分:0)
Does it solves your problem?
@property
def data_dict(self):
return dict(zip(Test.data['percentage'], Test.data['age']))
答案 1 :(得分:0)
在PostgreSQL中它会像这样(对于PostgreSQL> = 9.4)
SELECT json_object(array_agg(ARRAY[p,a]))
FROM (
SELECT unnest(ARRAY(select jsonb_array_elements_text(data->'percentage'))) p,
unnest(ARRAY(select jsonb_array_elements_text(data->'age'))) a
FROM test
) x;
在SQLAlchemy中
from sqlalchemy.orm import column_property
from sqlalchemy import select, alias, text
class Test(Base):
__tablename__ = 'test'
data = db.Column(JSONB)
data_dict = column_property(
select([text('json_object(array_agg(ARRAY[p,a]))')]).select_from(
alias(select([
text("unnest(ARRAY(select jsonb_array_elements_text(data->'percentage'))) p, \
unnest(ARRAY(select jsonb_array_elements_text(data->'age'))) a")
]).select_from(text('test')))
)
)