SQLAlchemy não atualizará meu banco de dados

Eu estou fazendo um aplicativo Pyramid usando o SQLAlchemy-0.7.8. Eu estou usando 64bit Python3.2.

A questão é, por que a seguinte função não compromete nada com o banco de dados?

def create_card(sText,sCard):
    """
    create a wildcard instance if all is well (ie,sCard match in sText)
    return 
        oCard, dCard
    otherwise return False,False
    """
    oMatch = re.search(sCard,sText)
    if oMatch:
        oCard = WildCard()
        #set up some stuff about the WildCard

        DBSession.add(oCard)
        DBSession.flush()
        dCard = {
                    'id'            : oCard.id,
                    'span'          : oMatch.span(),
                    'card'          : oCard.card_string,
                            }
        return oCard,dCard
    return False,False  

Eu importo o DBSession de outro script. é definido da seguinte forma:

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))

Veja algumas informações básicas:

O aplicativo que estou criando deve ser usado para caracterizar grandes blocos de HTML através do uso de expressões regulares. Se o aplicativo travar e achar que deve haver uma correspondência de cartão para um pedaço de texto, o usuário receberá um pequeno formulário para preencher. Assim que o formulário for confirmado, create_card será chamado. Se o curinga for correspondido à sequência, uma instância do WildCard será criada.

A classe WildCard não é nada especial, apenas armazena uma string e alguns inteiros. Se eu imprimir dCard, parece que o WildCard foi confirmado com sucesso porque tem um ID inteiro. Se eu não chamar flush na sessão de banco de dados, então dCard ['id'] é None.

o campo de id se parece com:

id = Column(Integer,Sequence('wild_seq'), primary_key=True)

As linhas add e flush causam a seguinte saída do console:

2012-09-16 12:30:34,845 INFO  [sqlalchemy.engine.base.Engine][Dummy-2] INSERT INTO wildcard_wildcards (card_string, range_id, brand_id, category_id, group_cat_map_id, heading_group_id, heading_to_grp_map_id, heading_id, value_map_id, igneore_match) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2012-09-16 12:30:34,845 INFO  [sqlalchemy.engine.base.Engine][Dummy-2] ('sCard contents', None, None, None, None, None, None, None, None, 0)

Então, até este ponto, tudo está se comportando como é esperado.

Aqui está o problema: Mesmo que a instância do WildCard pareça ter sido confirmada no banco de dados, e nenhuma exceção foi levantada, o exame direto do banco de dados mostra que nenhuma alteração foi feita.

A substituição de flush () por commit () gera a seguinte exceção:

AssertionError: Transaction must be committed using the transaction manager

questionAnswers(1)

yourAnswerToTheQuestion