Frage

Ich habe in meinem aktuellen Projekt über einen Ort kommen, wo ich mehrere Klassen erstellt habe eine komplizierte Datenstruktur im Speicher und ein ausgefülltes SQL-Schema zum Speichern der gleichen Daten in einer Datenbank zu speichern. Ich habe beschlossen, SQLAlchemy als ORM-Schicht zu verwenden, da es die flexibelste Lösung scheint, dass ich auf meine Bedürfnisse anpassen kann.

Mein Problem ist, dass ich jetzt eine ganze Tabelle nur ein Array-Attribut im Speicher abbilden muß und bin kämpfen, um herauszufinden, ob dies möglich ist, und wenn ja, wie es mit SQLAlchemy zu tun. Es ist immer noch möglich, dass mir die Datenstrukturen in Code zu ändern (obwohl weniger als ideal), wenn nicht, aber ich würde es vorziehen, nicht zu tun.

Die Tabelle in Frage wird die folgende SQL erstellt werden:

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 ;

Dies ist nur ein kleiner Teil der gesamten Datenbank und dasselbe ist an mehreren Stellen erforderlich sein wird.

War es hilfreich?

Lösung

Es scheint, Sie wollen so etwas wie

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

Wenn nicht bitte in Ihrer Frage klären.

Im Idealfall sollten Sie haben zwei Zuordnungen zu diesen 2 Tabellen. Dabei spielt es keine Rolle, ob Sie nicht die zweite Abbildung anderswo zugreifen. work Mapping sollte eine Eins-zu-viele-Beziehung-Mapping variant. Dies würden Sie eine Liste von variant Instanzen mit einem bestimmten work zugeordnet ist, auf welcher auch immer Attribut Sie Ihre Beziehung definieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top