SQLAlchemy: Converta o valor da coluna e para trás entre o formato interno e o banco de dados

No meu banco de dados, tenho algumas colunas onde os dados são armazenados em algum formato estranho. Como o banco de dados também é usado por outro código, não posso alterar o formato dos dados.

Por exemplo, um dos formatos estranhos é que um valor de tempo é representado como uma sequência como23:42:30. Eu gostaria de ter um pouco de magia que me permita usar sempredatetime.time objetos no lado python.

Uma solução muito simples seria algo como:

col_raw = Column('col', String(7))

@property
def col(self):
    return datetime.strptime(self.col_raw, '%H:%M:%S').time()
@col.setter
def colself, t):
    self.col_raw = t.strftime('%H:%M:%S')

No entanto, isso apenas resolve o problema de leitura e gravação de dados. Coisas como essa não seriam possíveis:

Table.query.filter(Table.col == time(23,42,30))

Outra maneira seria usar oextensão híbrida. Dessa forma, a consulta seria possível, mas se eu a vir corretamente, a escrita não. Além disso, requer a codificação de tudo duas vezes, uma vez no código python e outra no código SQL. (Problema adicional: não tenho certeza se a conversão pode ser gravada usando apenas o código SQL.)

Não existe realmente nenhuma maneira de combinar os dois? Como eu defino duas funções, digamospython2sql esql2python, que SQLAlchemy usa para converter transparentemente os valores do objeto python em string e vice-versa? Eu sei que isso tornaria algumas consultas impossíveis, comobetween oulike ou somas e afins, mas tudo bem.

Lembre-se de que a hora é apenas um exemplo dos casos em que preciso converter dados; por isso, tente manter as respostas genéricas.

questionAnswers(1)

yourAnswerToTheQuestion