Skip to content

database: run_in_transaction with DQL (Data Query Language) statements seems impossible to use and produces "Transaction is not begun" and then "Transaction is already committed" #1234

Open
@odeke-em

Description

@odeke-em

While working on battle testing for observability to inspect expected spans, I wrote this code

def tx_dql_select(tx):
    return tx.execute_sql("SELECT * FROM Singers")

fn = tx_dql_select
try:
     result = database.run_in_transaction(fn)
     if result and hasattr(result, "__iter__"):
            for res in result:
                  print(res)
except Exception as e:
     print(fn.__name__, e)

which produces

tx_dql_select Transaction is not begun

but when I add tx.begin() before the return I get back

tx_dql_select Transaction is already committed

It seems impossible to use, we need to figure out what's up. I should be able to run purely DQL in a transaction.

Kindly cc-ing @sakthivelmanii @harshachinta

Metadata

Metadata

Assignees

Labels

api: spannerIssues related to the googleapis/python-spanner API.priority: p3Desirable enhancement or fix. May not be included in next release.type: questionRequest for information or clarification. Not an issue.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions