如何使用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)}")
错误分析
- 参数索引越界:GridDB Python客户端的参数索引以0为起始值,而非1。原代码中
query.set_parameter(1, 'sensor_123')使用了索引1,超出了单个参数的有效索引范围(仅0可用),直接触发报错。 - 语法笔误:结果集处理代码里的
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
相关产品推荐
相关产品推荐

