在 SQLAlchemy 中,如何过滤我的查询以仅包含具有非空 jsonb 列值的行?
In SQLAlchemy how can I filter my query to only include rows with non-empty jsonb column values?
我有一个正在查询的数据库 table,简化的示例如下所示:
+----------+---------+----------------------------------------------------------------------------------------------------------------+
| entry_id | list_id | availability |
|----------+---------+----------------------------------------------------------------------------------------------------------------|
| 130 | 199 | {"2021-10-20": {"value": "no_reply", "notify": false}, "2021-10-21": {"value": "no_reply", "notify": false}} |
| 131 | 199 | {"2021-10-20": {"value": "no_reply", "notify": false}, "2021-10-21": {"value": "no_reply", "notify": false}} |
| 132 | 199 | {} |
| 129 | 199 | {"2021-10-20": {"value": "available", "notify": false}, "2021-10-21": {"value": "available", "notify": false}} |
+----------+---------+----------------------------------------------------------------------------------------------------------------+
在我的查询中,我只想包含可用性列 dict 具有键的行,并使用默认值“{}”过滤掉所有空行(例如 entry_id 132)
我在查询中使用 ListEntry.availability != '"{}"'
作为过滤器取得了一些成功,但它似乎有点老套,我想知道是否有更好的方法?
您无法将比较的右侧转换为 jsonb:
SELECT * FROM ListEntry WHERE availability <> '{}'::jsonb
我有一个正在查询的数据库 table,简化的示例如下所示:
+----------+---------+----------------------------------------------------------------------------------------------------------------+
| entry_id | list_id | availability |
|----------+---------+----------------------------------------------------------------------------------------------------------------|
| 130 | 199 | {"2021-10-20": {"value": "no_reply", "notify": false}, "2021-10-21": {"value": "no_reply", "notify": false}} |
| 131 | 199 | {"2021-10-20": {"value": "no_reply", "notify": false}, "2021-10-21": {"value": "no_reply", "notify": false}} |
| 132 | 199 | {} |
| 129 | 199 | {"2021-10-20": {"value": "available", "notify": false}, "2021-10-21": {"value": "available", "notify": false}} |
+----------+---------+----------------------------------------------------------------------------------------------------------------+
在我的查询中,我只想包含可用性列 dict 具有键的行,并使用默认值“{}”过滤掉所有空行(例如 entry_id 132)
我在查询中使用 ListEntry.availability != '"{}"'
作为过滤器取得了一些成功,但它似乎有点老套,我想知道是否有更好的方法?
您无法将比较的右侧转换为 jsonb:
SELECT * FROM ListEntry WHERE availability <> '{}'::jsonb