GridDB表中新增myName数据后提示无法找到myName问题咨询
GridDB报错「无法找到myName」问题排查及修复
核心错误原因
- 错误1:
col.get()方法仅支持通过行键查询数据,若你创建集合时未将第一个字段设置为行键,或你传入的"myName"不是对应行的行键,调用该方法必然返回找不到数据的报错。 - 错误2:查询语句
select * where name = 'myName'中的字段名name需要和你创建集合时定义的列名完全匹配,若列名设置不一致会触发字段不存在/查询无结果报错。 - 错误3:
col.put()传入的列表值顺序必须和集合定义的列顺序严格对应,若顺序错位会导致"myName"没有被写入你预期的name列,自然查询不到。 - 错误4:
query.fetch(update)中的update如果是未定义的变量,会触发参数异常,该参数需要传入布尔值True表示开启结果集可更新权限。
修正示例代码
首先确认集合创建逻辑(必须和你插入、查询的字段对应):
# 先定义集合结构,假设4个列分别为:name(STRING,设为行键)、flag(BOOL)、count(INTEGER)、content(BLOB) conInfo = griddb.ContainerInfo("your_container_name", [ ["name", griddb.Type.STRING], ["flag", griddb.Type.BOOL], ["count", griddb.Type.INTEGER], ["content", griddb.Type.BLOB] ], griddb.ContainerType.COLLECTION, True) # 最后一个参数为True表示将第一列设为行键 col = gridstore.put_container(conInfo)
修正后的数据操作代码:
# 插入数据,顺序和列定义完全对应 col.put(["myName", False, 1, blob]) # 此时因为name是行键,col.get()可以正常获取到对应行 mlist = col.get("myName") # 查询语句字段名和定义的列名一致,可正常查询 query=col.query("select * where name = 'myName'") rs = query.fetch(True) while rs.has_next(): data = rs.next() data[2] = data[2] + 1 rs.update(data)
内容的提问来源于stack exchange,提问作者Ibrahim Paracha
相关产品推荐
相关产品推荐

