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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top