Questo è relativo a questa domanda converting to declarative method and column property, a cui non è mai stata data risposta.SQLAlchemy Come mappare una singola colonna della relazione uno a uno usando dichiarativo
Stiamo provando a impostare un progetto Flask-SQLAlchemy su uno schema esistente (uno non possiamo cambiare) e abbiamo deciso sulla sintassi dichiarativa in modo da poter organizzare le classi in più file in modo sano per la manutenzione. Questo funziona per la maggior parte delle nostre relazioni tranne per qualcosa che chiamiamo, per mancanza di un termine migliore, tabelle di attributi. Si tratta di tabelle a foglia singola su alcuni oggetti primari e in genere contengono un tipo di vocabolario controllato per l'attributo. L'obiettivo nell'ORM è di mappare tutti questi tipi (di cui ci sono molti) tipi di tabelle come se fossero proprietà della tabella primaria.
Ecco un esempio SQA con due tavoli:
class MarkerType(db.Model):
__tablename__="mrk_types"
_marker_type_key = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String())
class Marker(db.Model):
__tablename__="mrk_marker"
_marker_key=db.Column(db.Integer,primary_key=True)
_marker_type_key=db.Column(db.Integer())
si vuole accedere MarkerType.name come se dicevamo Marker.markertype, o in una query come Marker.markertype == 'cosa'. L'unico modo ho potuto gestire che è con un column_property nella classe Marker, in questo modo:
markertype = db.column_property(
db.select([MarkerType.name]).
where(MarkerType._marker_type_key==_marker_type_key)
)
Tuttavia, non riesco a trovare il modo di fare questo in modo dichiarativo, e forse in questo modo non esiste. C'è un modo sano per raggiungere questo obiettivo senza dovermi preoccupare delle mie importazioni o, ancora peggio, dell'ordine delle mie lezioni? Dato che abbiamo centinaia di tabelle da mappare, posso vedere che si tratta di un incubo di manutenzione se dobbiamo preoccuparci della classe e dell'ordine di importazione.
Se tutto ciò è totalmente impossibile, pio desiderio, qual è un approccio migliore per mappare queste tabelle?
Hai esaminato gli esempi ['Vertical Attribute Mapping'] (http://docs.sqlalchemy.org/en/rel_0_9/orm/examples.html#module-examples.vertical)? – van
No, ma non sono sicuro che la mia situazione si applichi. Non ho una tabella figlio con coppie di valori chiave. È un tavolo per bambini con solo un valore. Non sono sicuro che sia ancora considerato un tavolo verticale. Inoltre, gli esempi per l'impostazione di assoc_proxy non sembrano dichiarativi. – kevinrstone