nel mio database, ho alcune colonne in cui dati sono memorizzati in un formato strano. Poiché il database è utilizzato anche da un altro codice, non posso modificare il formato dei dati.SQLAlchemy: Convertire valore colonna avanti e indietro tra formato interno e il database
Per esempio, uno dei formati strana è che un valore di tempo è rappresentato come una stringa come 23:42:30
. Mi piacerebbe avere qualche magia che mi permetta di usare sempre gli oggetti datetime.time
sul lato python.
Una soluzione molto semplice sarebbe qualcosa di simile:
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')
Tuttavia, questo risolve solo il problema per i dati di lettura e scrittura. Cose come questa non sarebbe possibile:
Table.query.filter(Table.col == time(23,42,30))
Un altro modo sarebbe quello di utilizzare il hybrid extension. In questo modo, l'interrogazione sarebbe possibile, ma se la vedo correttamente, la scrittura non lo farebbe. Inoltre, richiede la scrittura di codice tutto doppio, una volta nel codice Python e una volta nel codice SQL. (Ulteriori problema. Non sono sicuro se la conversione può essere scritta utilizzando solo il codice SQL)
C'è davvero alcun modo da garantire sia? Come definisco due funzioni, diciamo python2sql
e sql2python
, che SQLAlchemy utilizza per convertire in modo trasparente i valori dall'oggetto python alla stringa e al retro? So che questo renderebbe alcune query impossibili, come ad esempio between
o like
o somme e simili, ma va bene.
prega di tenere presente che la cosa il tempo è unico esempio uno dei casi in cui ho bisogno per convertire i dati; quindi per favore prova a mantenere le risposte generiche.