You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用GridDB Python客户端执行参数化查询?遇参数索引越界错误

解决GridDB Python客户端参数化查询“Parameter index out of range”错误

问题场景

使用GridDB Python客户端操作时序数据,尝试通过参数化查询防止SQL注入,运行代码时触发错误:

[0] -1: Parameter index out of range

原代码如下:

from griddb_python import griddb

# Initialize GridStore factory
factory = griddb.StoreFactory.get_instance()

try:
    # Connect to the GridStore
    gridstore = factory.get_store(
        host='239.0.0.1',
        port=31999,
        cluster_name='defaultCluster',
        username='admin',
        password='admin'
    )

    # Get the container
    container = gridstore.get_container("sensor_data")

    # Create a parameterized query
    query = container.query("SELECT * FROM sensor_data WHERE sensor_id = ?")

    # Set the parameter value
    query.set_parameter(1, 'sensor_123')

    # Execute the query
    rs = query.fetch()

    # Process the result set
    while rs.has_next():
        data = http://rs.next()
        print(data)

except griddb.GSException as e:
    for i in range(e.get_error_stack_size()):
        print(f"[{i}] {e.get_error_code(i)}: {e.get_message(i)}")

错误分析

  1. 参数索引越界:GridDB Python客户端的参数索引以0为起始值,而非1。原代码中query.set_parameter(1, 'sensor_123')使用了索引1,超出了单个参数的有效索引范围(仅0可用),直接触发报错。
  2. 语法笔误:结果集处理代码里的data = http://rs.next()是无效语法,应为data = rs.next(),否则会引发额外的语法错误。

修正后的代码

from griddb_python import griddb

# Initialize GridStore factory
factory = griddb.StoreFactory.get_instance()

try:
    # Connect to the GridStore
    gridstore = factory.get_store(
        host='239.0.0.1',
        port=31999,
        cluster_name='defaultCluster',
        username='admin',
        password='admin'
    )

    # Get the container
    container = gridstore.get_container("sensor_data")

    # Create a parameterized query
    query = container.query("SELECT * FROM sensor_data WHERE sensor_id = ?")

    # Set the parameter value(索引改为0)
    query.set_parameter(0, 'sensor_123')

    # Execute the query
    rs = query.fetch()

    # Process the result set(修正笔误)
    while rs.has_next():
        data = rs.next()
        print(data)

except griddb.GSException as e:
    for i in range(e.get_error_stack_size()):
        print(f"[{i}] {e.get_error_code(i)}: {e.get_message(i)}")

内容的提问来源于stack exchange,提问作者PhantomPhreak1995

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 02:37:23