databases icon indicating copy to clipboard operation
databases copied to clipboard

Is it true that the "await transaction.start()" line is missing from the databases lower-level transaction API usage example?

Open allyotov opened this issue 1 year ago • 1 comments

The database help suggests the following way to use the low-level transaction API:

transaction = await database.transaction()
try:
    ...
except:
    await transaction.rollback()
else:
    await transaction.commit()

But if I try to use this code as is, I guess, the created transaction is not started. So, maybe, we have to start it explicitly as follows?

transaction = await database.transaction()
await transaction.start()  # start transaction explicitly
try:
    ...
except:
    await transaction.rollback()
else:
    await transaction.commit()

Please confirm or deny my assumption.

allyotov avatar Dec 10 '24 14:12 allyotov

I think, my assumption is wrong, because if I run transaction.start() it doubles in connection's transaction stack, so when I will commit it, one instance of it will still be there in transaction stack, and that may cause further problems.

So the example in databases documentation is correct.

Thank you.

allyotov avatar Dec 12 '24 14:12 allyotov