Кажется, вам следует переместить транзакцию с db.transaction в базу.
Сделай метод в базе, вернув db.transaction
@staticmethod
def gettransaction(): return db.transaction
тогда вы перегрузите его в дочерних файлах, как / при необходимости.
В базу вы затем делаете
def methodB(cls):
with cls.gettransaction():
bla ...
Вот полный рабочий пример с фиктивной транзакцией
* * 1010
это приводит к
enter
A
exit
enter2
A
exit2