gcloud - The method `run_in_transaction` of Spanner client library for Python returned a message "Transaction is not be

After I obtain my authenticate key with gcloud CLI, I try to execute the below Python code to create a

After I obtain my authenticate key with gcloud CLI, I try to execute the below Python code to create a table in my instance of Spanner. However, Spanner returned a message "Transaction is not begun."

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)

I expect that a transaction will begin when the method Database.run_in_transaction(transaction) is invoked.

Please tell me how to fix the above code.

After I obtain my authenticate key with gcloud CLI, I try to execute the below Python code to create a table in my instance of Spanner. However, Spanner returned a message "Transaction is not begun."

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)

I expect that a transaction will begin when the method Database.run_in_transaction(transaction) is invoked.

Please tell me how to fix the above code.

Share Improve this question asked Nov 17, 2024 at 4:46 Kazuma KusuKazuma Kusu 52 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

Spanner does not support executing DDL statements in a transaction. Instead, you should use the spanner_client.database_admin_api. update_database_ddl function to execute DDL statements.

A full example for executing a DDL statement with the Python client can be found here: https://cloud.google/spanner/docs/getting-started/python#add-column-client-library-Python

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745638412a4637537.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信