SQLAlchemy: convierte el valor de la columna de un lado a otro entre el formato interno y el de la base de datos

En mi base de datos, tengo algunas columnas donde los datos se almacenan en algún formato extraño. Dado que la base de datos también es utilizada por otro código, no puedo cambiar el formato de datos.

Por ejemplo, uno de los formatos extraños es que un valor de tiempo se representa como una cadena como23:42:30. Me gustaría tener algo de magia que me permita usar siempredatetime.time objetos en el lado de la pitón.

Una solución muy simple sería 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')

Sin embargo, esto solo resuelve el problema para leer y escribir datos. Cosas como esta no serían posibles:

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

Otra forma sería usar elextensión híbrida. De esa manera, sería posible realizar consultas, pero si lo veo correctamente, escribir no lo haría. Además, requiere escribir la codificación de todo dos veces, una en código python y otra en código SQL. (Problema adicional: no estoy seguro de si la conversión se puede escribir utilizando solo código SQL).

¿Realmente no hay forma de combinar ambos? Tal como defino dos funciones, digamospython2sql ysql2python, ¿qué SQLAlchemy usa para convertir de forma transparente los valores del objeto python a cadena y viceversa? Sé que esto haría que algunas consultas fueran imposibles, comobetween olike o sumas y similares, pero está bien.

Tenga en cuenta que la cuestión del tiempo es solo un ejemplo de los casos en los que necesito convertir datos; así que intenta mantener las respuestas genéricas.

Respuestas a la pregunta(1)

Su respuesta a la pregunta