Python 的 Spanner 客户端库的方法 `run_in_transaction` 返回一条消息“事务未开始。”

问题描述 投票:0回答:1

使用 gcloud CLI 获取身份验证密钥后,我尝试执行以下 Python 代码以在 Spanner 实例中创建一个表。 然而,Spanner 返回了一条消息“交易尚未开始。”

from google.cloud import spanner
from google.api_core.exceptions import GoogleAPICallError

def _create_table(transaction):
  """
  a transaction for creating a table
  """
  query = (
      'CREATE TABLE test_table (id INT64, data STRING(MAX)) PRIMARY KEY (id)'
  )
  transaction.execute_sql(query)

# access to Spanner
spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

# execute a query with run_in_transaction
try:
    database.run_in_transaction(_create_table)
except GoogleAPICallError as ex:
  print(ex)
except ValueError as ex:
  print(ex)

我希望当调用方法

Database.run_in_transaction(transaction)
时就会开始事务。

请告诉我如何修复上述代码。

python-3.x gcloud google-cloud-spanner
1个回答
0
投票

Spanner不支持在事务中执行DDL语句。相反,您应该使用

spanner_client.database_admin_api. update_database_ddl
函数来执行 DDL 语句。

可以在此处找到使用 Python 客户端执行 DDL 语句的完整示例:https://cloud.google.com/spanner/docs/getting-started/python#add-column-client-library-Python

© www.soinside.com 2019 - 2024. All rights reserved.