SQLAlchemy +Postgresql访问jsonb元素数组

vojdkbi0  于 2023-02-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(139)

我有一个查询,看起来像这样。query = db.query(status_cte.c.finding_status_history)当我检查它的.type时,finding_status_history列是数组类型。它是一个jsonb对象的数组,如果更容易的话,我可以很容易地将它改为json。我还用它作为json进行了测试。

[
    {
        "data": [
            {
                "status": "closed",
                "created_at": "2023-01-27T18:05:27.579817",
                "previous_status": "open"
            },
            {
                "status": "open",
                "created_at": "2023-01-27T18:05:28.694352",
                "previous_status": "closed"
            }
        ]
    },
    ...
]

我试图访问嵌套在data中的第一个字典和status列。
我试着用query = db.query(status_cte.c.finding_status_history[0])来获取它,但是它返回了一个空字典的列表,如下所示。

[
    {},
    {},
    {},
    {},
    {},
    {},
    {}
]

我不知道为什么不工作,因为它是我的印象,我应该抓住第一个条目。我假设我需要访问“数据”一些如何第一,但我也尝试了...
query = db.query(status_cte.c.finding_status_history.op('->>')('data')这给了我jsonb[] ->> unknown operator doesn't exist。我试着输入字符串类型的转换数据,我得到了同样的错误,但是jsonb[] ->> String等等
另外,当循环通过项for item in query.all()时,我看到[0]导致(None,),[1]导致

({
                "status": "closed",
                "created_at": "2023-01-27T18:05:27.579817",
                "previous_status": "open"
},)

作为元组...

umuewwlo

umuewwlo1#

秘密是[0]不是第一个元素。[1]也被注意到[-1]似乎没有给予我最后一个元素,所以我也必须排序我的聚合json对象。

相关问题