Сопоставление таблицы базы данных с атрибутом объекта

StackOverflow https://stackoverflow.com/questions/834722

Вопрос

В моем текущем проекте я встретил место, где я создал несколько классов для хранения сложной структуры данных в памяти и законченную схему SQL для хранения тех же данных в базе данных. Я решил использовать SQLAlchemy в качестве слоя ORM, так как он кажется наиболее гибким решением, которое я могу адаптировать к своим потребностям.

Моя проблема заключается в том, что теперь мне нужно сопоставить всю таблицу только с атрибутом массива в памяти, и я пытаюсь выяснить, возможно ли это, и если да, то как это сделать с помощью SQLAlchemy. Для меня все еще возможно изменить структуры данных в коде (хотя и не в идеале), если нет, но я бы предпочел этого не делать.

Соответствующая таблица создается с использованием следующего 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 ;

Это лишь небольшая часть полной базы данных, и в некоторых местах требуется то же самое.

Это было полезно?

Решение

Кажется, вы хотите что-то вроде

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

Если нет, пожалуйста, уточните свой вопрос.

В идеале у вас должно быть 2 сопоставления с этими 2 таблицами. Не имеет значения, если вы не получите доступ ко второму отображению где-либо еще. Отображение work должно иметь отношение один ко многим с отображением option . Это даст вам список вариант экземпляров, связанных с конкретной работой с любым атрибутом, который вы определяете ваши отношения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top