API клиента Python Spanner INSERT DML не вставляет данные и не возвращает ошибку - PullRequest
0 голосов
/ 31 октября 2018

У меня есть класс, который позволяет мне повторно использовать клиентское соединение гаечного ключа. Я пытаюсь выполнить базовую вставку с помощью DML и не могу этого сделать в своем классе. Я могу вставить данные с помощью командной строки:

cloud spanner databases execute-sql queue --instance=sandbox --sql="INSERT MESSAGE_STORE (MessageId,Message,MessageRecipient,MessageSender) VALUES ( 'id','hello spanner','fred','bob')"

Однако, когда я пытаюсь сделать эквивалент с использованием клиентских библиотек Python, он не вставляет строку и даже не выдает ошибку. У меня отладка установлена ​​в true, так что это не должно быть проблемой. Я родом из C / C ++ и новичок в python, поэтому ошибка может лежать там, я не уверен.

Вот мой код класса:

class DataStore():

def __init__(self):

        self.logger = logging.getLogger('manager.sub')
        loghandler = logging.StreamHandler(sys.stdout)
        loghandler.setFormatter(logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
         self.logger.addHandler(loghandler)
         self.logger.setLevel(logging.DEBUG)

        client = spanner.Client()
        self.instance = client.instance(INSTANCE_ID)
        database = self.instance.database(DATABASE_ID)
        self.client = database

def insertmessage(self, newmsg):
    messageid = uuid.uuid4()
    sender = newmsg['Sender']
    recipient = newmsg['Recipient']
    message = newmsg['Message']

    # Values are hardcoded for now until I can get it to work

    def insert_message(transaction):
            row_ct = transaction.execute_update(
                "INSERT MESSAGE_STORE (MessageId, Message, MessageRecipient, MessageSender) "
            " VALUES ('id','hello spanner' , 'fred' , 'bob') "
            )

            print("{} record(s) inserted.".format(row_ct))

            try:
                self.client.run_in_transaction(insert_message)
            except Exception as e:
                self.logger.debug(e)

    # Hardcoded for now until I can actually get the data inserted
    output = "{ 'Message Id':" +  str(messageid) +", 'Result Code': '1' }"
    return output

1 Ответ

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

Ваша проблема, по-видимому, из-за строгих требований Python к правильному интервалу и отступам. Обновите функцию insert_message, чтобы она была структурирована следующим образом:

def insert_message(transaction):
    row_ct = transaction.execute_update(
        "INSERT MESSAGE_STORE (MessageId, Message, MessageRecipient, MessageSender) "
        " VALUES ('id', 'hello spanner', 'fred', 'bob')"
    )

    print("{} record(s) inserted.".format(row_ct))

try:
    self.client.run_in_transaction(insert_message)
except Exception as e:
    self.logger.debug(e)
...