Vorrei rappresentare un tipo di dati come singola colonna nel mio modello, ma in realtà i dati verranno archiviati in più colonne nel database. Non riesco a trovare alcuna buona risorsa su come farlo in SQLAlchemy.Tipo personalizzato SQLAlchemy che contiene più colonne
Vorrei che il mio modello per assomigliare a questo (questo è un esempio semplificato utilizzando la geometria al posto del mio vero problema che è più difficile da spiegare):
class 3DLine(DeclarativeBase):
start_point = Column(my.custom.3DPoint)
end_point = Column(my.custom.3DPoint)
questo modo ho potuto assegnare un oggetto con il (x, y, z) componenti del punto contemporaneamente senza averli impostati singolarmente. Se dovessi separare ogni componente, questo potrebbe diventare brutto, specialmente se ogni classe ha molti di questi oggetti compositi. Vorrei combinare i valori in un campo codificato, tranne che ho bisogno di interrogare ogni valore separatamente, a volte.
Sono stato in grado di scoprire come creare tipi personalizzati utilizzando una singola colonna in the documentation. Ma non c'è indicazione che io possa mappare un singolo tipo su più colonne.
Suppongo che potrei realizzare questo utilizzando una tabella separata, e ogni colonna sarebbe una chiave esterna, ma nel mio caso non penso abbia senso avere una mappatura uno a uno per ogni punto in un altro tabella, e questo ancora non dà la possibilità di impostare i relativi valori tutti in una volta.
Questo è grande per uso di una volta, tuttavia, che l'approccio rende impossibile fattore fuori come un tipo separato, in casi come sopra quando ci sono due campi compositi dello stesso tipo (start_point e end_point) - ci sarà la duplicazione dei nomi delle colonne. È possibile utilizzare l'inferenza automatica dei nomi di colonna che funzionano per campi a colonna singola e aggiungere semplicemente "_x", "_y" e "_z"? (Meta: dovrei fare una domanda a parte su SO su questo?) – Veky