Google spanner 结构作为参数
Google spanner structs as parameter
当使用 spanner python 客户端时(但也许问题更普遍)似乎无法将结构作为参数传递给查询。
考虑以下设置:
from google.cloud.proto.spanner.v1 import type_pb2
from google.cloud import spanner
spanner_client = spanner.Client()
instance = spanner_client.instance('myinstance')
database = instance.database('mydb')
如果我想将以下查询转换为使用参数
select * from UNNEST(ARRAY[STRUCT<foo INT64, bar INT64>(1, 2)])
通过
STRUCT_TYPE = type_pb2.StructType()
FOO = type_pb2.StructType.Field(name='foo', type=type_pb2.Type(code=type_pb2.INT64))
BAR = type_pb2.StructType.Field(name='bar', type=type_pb2.Type(code=type_pb2.INT64))
STRUCT_TYPE.fields.extend([FOO, BAR])
database.execute_sql('select * from UNNEST(ARRAY[@struct])',
params={'struct': [1,2]},
param_types={'struct': STRUCT_TYPE})
会给我
TypeError: Parameter to MergeFrom() must be instance of same class: expected Type got StructType.
有什么方法可以传递结构吗?
您现在无法传递结构。这是我们正在解决的问题,但没有确定的时间表。
当使用 spanner python 客户端时(但也许问题更普遍)似乎无法将结构作为参数传递给查询。
考虑以下设置:
from google.cloud.proto.spanner.v1 import type_pb2
from google.cloud import spanner
spanner_client = spanner.Client()
instance = spanner_client.instance('myinstance')
database = instance.database('mydb')
如果我想将以下查询转换为使用参数
select * from UNNEST(ARRAY[STRUCT<foo INT64, bar INT64>(1, 2)])
通过
STRUCT_TYPE = type_pb2.StructType()
FOO = type_pb2.StructType.Field(name='foo', type=type_pb2.Type(code=type_pb2.INT64))
BAR = type_pb2.StructType.Field(name='bar', type=type_pb2.Type(code=type_pb2.INT64))
STRUCT_TYPE.fields.extend([FOO, BAR])
database.execute_sql('select * from UNNEST(ARRAY[@struct])',
params={'struct': [1,2]},
param_types={'struct': STRUCT_TYPE})
会给我
TypeError: Parameter to MergeFrom() must be instance of same class: expected Type got StructType.
有什么方法可以传递结构吗?
您现在无法传递结构。这是我们正在解决的问题,但没有确定的时间表。