簡體   English   中英

SQLAlchemy:通過對嵌套 JSONB 字段中的鍵進行精確匹配來檢索記錄

[英]SQLAlchemy: retrieve records by exact matching on keys in nested JSONB field

假設我有一個名為Table ,其中包含一個 JSONB 字段data 其中一條記錄(記錄 1)存儲了以下 JSON 對象:

{
    "A": {},
    "B": {}
}

另一條記錄(記錄 2)存儲了以下 JSONB 對象:

{
    "A": {},
    "B": {},
    "C": {}
}

我正在努力通過對data字段中的鍵進行精確過濾來定義一種查找記錄的方法。 例如,我想檢索data字段中只有鍵"A""B" 的記錄,即記錄 1。

我已經嘗試了 SQLAlchemy 的JSONB類型比較器方法,例如contains()方法,但是在以下 Python 查詢的情況下,這將返回兩個記錄:

Session().query(Table).filter(Table.data.contains({"A": {}, "B": {}})).all()

是否可以使用可用的 SQLAlchemy 過濾器對(一系列)鍵進行精確過濾? 歡迎任何想法。 非常感謝!

? 如果字符串作為頂級鍵存在,則運算符返回 true。

-運算符從左操作數中刪除鍵/值對。

您可以像這樣組合這些:

select data from Table 
where data ? 'A' and data ? 'B' and (data - 'A') - 'B' = '{}';

在英語中,獲取記錄

  • 包含“A”和“B”鍵: data ? 'A' and data ? 'B' data ? 'A' and data ? 'B'
  • 如果刪除 'A' 和 'B' 鍵(即不包含其他鍵),則為空: (data - 'A') - 'B' = '{}'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM