Mappatura di una tabella di database su un attributo di un oggetto
-
08-07-2019 - |
Domanda
Mi sono imbattuto in un posto nel mio attuale progetto in cui ho creato diverse classi per l'archiviazione di una complessa struttura di dati in memoria e uno schema SQL completo per l'archiviazione degli stessi dati in un database. Ho deciso di utilizzare SQLAlchemy come livello ORM in quanto sembra la soluzione più flessibile che posso adattare alle mie esigenze.
Il mio problema è che ora ho bisogno di mappare un'intera tabella solo su un attributo di array in memoria e faccio fatica a scoprire se questo è possibile e, se lo è, come farlo con SQLAlchemy. È ancora possibile per me modificare le strutture di dati nel codice (anche se meno che ideale) in caso contrario, ma preferirei non farlo.
La tabella in questione viene creata utilizzando il seguente SQL:
CREATE TABLE `works` (
`id` BIGINT NOT NULL auto_increment,
`uniform_title` VARCHAR(255) NOT NULL,
`created_date` DATE NOT NULL,
`context` TEXT,
`distinguishing_characteristics` TEXT,
PRIMARY KEY (`id`),
INDEX (`uniform_title` ASC),
INDEX (`uniform_title` DESC)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 ;
CREATE TABLE `variant_work_titles` (
`id` BIGINT NOT NULL auto_increment,
`work_id` BIGINT NOT NULL,
`title` VARCHAR(255) NOT NULL,
PRIMARY KEY(`id`),
INDEX (`work_id`),
INDEX (`title` ASC),
INDEX (`title` DESC),
FOREIGN KEY (`work_id`)
REFERENCES `works` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
Questa è solo una piccola parte del database completo e la stessa cosa sarà richiesta in diversi punti.
Soluzione
Sembra che tu voglia qualcosa del genere
work_instance.variants = [<some iterable of variants>]
In caso contrario, chiarire la domanda.
Idealmente dovresti avere 2 mappature su queste 2 tabelle. Non importa se non accederai alla seconda mappatura da nessun'altra parte. La mappatura work
dovrebbe avere una relazione uno-a-molti con la mappatura variant
. Questo ti darebbe un elenco di istanze variante
associate a un particolare lavoro
su qualunque attributo tu definisca la tua relazione.