python - 如何使用 Hasura GraphQL 查询 postgres RangeField
问题描述
Python3
django==3.0.5
Hasura v1.1.1
postgres==11.3
我正在尝试在 上使用Hasura
过滤器IntegerRangeField() and DecimalRangeField()
,但卡在第一个
from django.contrib.postgres.fields import DecimalRangeField, IntegerRangeField
from django.db import models
class MyModel(modles.Model):
age = IntegerRangeField()
...
在浏览器中,我使用此有效负载进行查询
query MyQuery {
insurance_life_premium(where: {age: {_eq: "47"}}) {
percentage_rate
plan_id
policy_term
premium
sum_insured
}
}
它引发错误
{
"errors": [
{
"extensions": {
"path": "$",
"code": "data-exception"
},
"message": "malformed range literal: \"47\""
}
]
}
我确认我的数据库有有效数据
In [1]: Premium.objects.filter(age__contains=47)
Out[1]: <QuerySet [<Premium: Premium object (1)>, <Premium: Premium object (60)>, <Premium: , <Premium: Premium object (878)>, '...(remaining elements truncated)...']>
在终端它提到parentheses
hasura_1 | {"type":"http-log","timestamp":"2020-04-29T17:19:08.094+0000","level":"error","detail":{"operation":{"user_vars":{"x-hasura-role":"admin"},"error":{"path":"$","error":"malformed range literal: \"47\"","code":"data-exception"},"request_id":"aab2de87-1095-423e-9eb1-dae34926b226","response_size":78,"query":{"operationName":"MyQuery","query":"query MyQuery {\n insurance_life_premium(where: {age: {_eq: \"47\"}}) {\n percentage_rate\n plan_id\n policy_term\n premium\n sum_insured\n }\n}\n"}},"http_info":{"status":200,"http_version":"HTTP/1.1","url":"/v1/graphql","ip":"172.22.0.1","method":"POST","content_encoding":null}}}
postgres_1 | 2020-04-29 17:19:08.095 UTC [34] ERROR: malformed range literal: "47"
postgres_1 | 2020-04-29 17:19:08.095 UTC [34] DETAIL: Missing left parenthesis or bracket.
postgres_1 | 2020-04-29 17:19:08.095 UTC [34] STATEMENT: SELECT coalesce(json_agg("root" ), '[]' ) AS "root" FROM (SELECT row_to_json((SELECT "_1_e" FROM (SELECT "_0_root.base"."percentage_rate" AS "percentage_rate", "_0_root.base"."plan_id" AS "plan_id", "_0_root.base"."policy_term" AS "policy_term", "_0_root.base"."premium" AS "premium", "_0_root.base"."sum_insured" AS "sum_insured" ) AS "_1_e" ) ) AS "root" FROM (SELECT * FROM "public"."insurance_life_premium" WHERE (("public"."insurance_life_premium"."age") = ($2)) ) AS "_0_root.base" ) AS "_2_root"
query MyQuery {
insurance_life_premium(where: {age: {_eq: "[46]"}}) {
percentage_rate
plan_id
policy_term
premium
sum_insured
}
}
同样的错误
"message": "malformed range literal: \"[46]\""
我试过{age: {_in: "(47,]"}}
括号和方括号的组合。它返回给我空白列表
解决方案
在这一刻。目前还不支持
推荐阅读
- reactjs - 一个函数实例可以持久存在于 React 函数组件中吗?
- python - 使用 Pyserial,为什么在实例化 Serial 类和用于写入数据的 Serial 对象之间需要延迟?
- file - 如何在R中复制文件夹
- python-3.x - 如何终止对无效值的解析?
- ns-3 - 带有 XG-PON 模块的 NS3 网络模拟器
- java - Hackerrank 平均分配巧克力
- java - Flink 1.9 No Filesystem for scheme:kubernetes 上的 hdfs
- c++ - 将 SDL2 与 Xcode 一起使用时出现 AddInstanceForFactory 和 HALC_ShellDriverPlugIn 错误?
- python - Python - 两个独立的条件取决于独立列的值(美国/加拿大邮政编码练习)
- apache-kafka - 检索过去 kafka 消费者的历史记录