Question

J'ai trouvé dans mon projet actuel un endroit où j'ai créé plusieurs classes pour stocker une structure de données complexe en mémoire et un schéma SQL complet pour stocker les mêmes données dans une base de données. J'ai décidé d'utiliser SQLAlchemy en tant que couche ORM, ce qui semble être la solution la plus flexible que je puisse adapter à mes besoins.

Mon problème est que je dois maintenant mapper une table entière sur un attribut de tableau en mémoire et j'ai du mal à savoir si cela est possible et, le cas échéant, comment procéder avec SQLAlchemy. Il m'est toujours possible de changer les structures de données en code (bien que moins qu'idéal) sinon, mais je préférerais ne pas le faire.

La table en question est créée à l'aide du code SQL suivant:

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 ;

Il ne s'agit que d'une petite partie de la base de données complète et la même chose sera nécessaire à plusieurs endroits.

Était-ce utile?

La solution

Il semble que vous souhaitiez quelque chose comme

work_instance.variants = [<some iterable of variants>]

Si ce n'est pas le cas, veuillez préciser votre question.

Idéalement, vous devriez avoir 2 correspondances à ces 2 tables. Peu importe si vous n'accéderez pas à la deuxième cartographie ailleurs. Le mappage work doit avoir une relation un-à-plusieurs avec le mappage variant . Cela vous donnerait une liste d'instances variant associées à un travail particulier, quel que soit l'attribut pour lequel vous définissez votre relation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top