Клиент Python Spanner "Неверное значение для ошибки записи параметра привязки" - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь выполнить оператор выбора в Spanner и получить эту ошибку:

InvalidArgument: 400 Invalid value for bind parameter record: Expected STRUCT<Msg_id STRING>

Я не могу понять, почему он жалуется на параметр bind, потому что код определяет параметр bind как STRING.

    requested_msg_id = str(msg['Message Id'])
    rc = ResultCode.SUCCESS
    ## SELECT MessageSender, Message FROM MESSAGE_STORE where MessageId = msg_id

    record_type = param_types.Struct([
        param_types.StructField('Msg_id', param_types.STRING)
    ])

    with self.client.snapshot() as snapshot:
        try:
            results = snapshot.execute_sql(
                "SELECT MessageSender, Message from MESSAGE_STORE "
                "WHERE MessageId = @record.Msg_id LIMIT 1",
                params={'record' : (requested_msg_id)},
                param_types={'record' : record_type})
        except Exception as fetch_exception:
             rc = ResultCode.ERR_NO_MSG_FOUND

    # results is an interator
    for row in results:
        if row: 
            output = "{ 'Message Id':" + requested_msg_id + ", 'Sender':" + row[1] + ", 'Message':" + row[2] + ", 'Result Code':" + str(rc.value) + "}"

Как видите, значение requested_msg_id в строке 1 является строкой. Затем в строке 6 я определяю Msg_Id как параметр связывания STRING. Кто-нибудь может увидеть, что мне не хватает?

1 Ответ

0 голосов
/ 04 ноября 2018

В SQL вы говорите, что параметр 'record' является структурой с Msg_id (@ record.Msg_id) Вы также говорите, что типом параметра «запись» является структура со строковым значением «Msg_id» (строки 5, 6 и 15)

Но тогда значение, которое вы передаете для параметра 'запись' (строки 1 и 14), является простой строкой, а не структурой, отсюда и ошибка.

Вам нужно либо сказать, что параметр является простой строкой (скажем, @Msg_id) в SQL, и указать тип в виде строки в строке 15 ... (что было бы проще, если бы не требовалось определять тип записи) или создайте значение параметра в виде структуры

...