Sono un po 'confuso sull'ereditarietà di sqlalchemy, al punto che non sono nemmeno sicuro di quale tipo di ereditarietà (tabella singola, tabella unita, calcestruzzo) dovrei usare qui. Ho una classe base con alcune informazioni condivise tra le sottoclassi e alcuni dati completamente separati. A volte, voglio i dati di tutte le classi e, a volte, solo delle sottoclassi. Ecco un esempio:Ereditarietà SQLAlchemy
class Building:
def __init__(self, x, y):
self.x = x
self.y = y
class Commercial(Building):
def __init__(self, x, y, business):
Building.__init__(self, x, y)
self.business = business
class Residential(Building):
def __init__(self, x, y, numResidents):
Building.__init__(self, x, y, layer)
self.numResidents = numResidents
Come dovrei convertire questo SQLAlchemy utilizzando dichiarativa? In che modo, quindi, dovrei interrogare quali edifici sono all'interno di x>5
e y>3
? O quali edifici residenziali hanno solo 1 residente?
Wow, questa è un'ottima risposta. Grazie! Quindi ho confrontato le prestazioni tra le opzioni di tabella singola e unita, e ho scoperto che la seconda query [filter (Residential.num_residents == n) .count()] esegue ~ 2x più velocemente nello scenario a tabella singola (come previsto). Tuttavia, per qualche motivo la prima query su Building [filter ((Building.x> x) & (Building.y> y)). Count()] è circa il 10% più lento con la tabella singola, sebbene in realtà carichi tutti gli elementi è abbastanza comparabile (.all()). – Noah
Per un problema più specifico relativo all'ereditarietà della tabella unita, consultare http: // stackoverflow.it/questions/8389606/how-can-a-sqlalchemy-class-inherit-correct-nonostante-having-a-tricky-foreignkey-r –
L'unica cosa che manca è un esempio che usa l'ereditarietà del tavolo concreto - quello che sto cercando aiuto con, naturalmente :-) Dato che questa è una vecchia domanda, forse è stata aggiunta l'ereditarietà della tabella concreta dopo che questa domanda ha avuto risposta. – ThatAintWorking