Сопоставление таблицы базы данных с атрибутом объекта
-
08-07-2019 - |
Вопрос
В моем текущем проекте я встретил место, где я создал несколько классов для хранения сложной структуры данных в памяти и законченную схему 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
. Это даст вам список вариант
экземпляров, связанных с конкретной работой
с любым атрибутом, который вы определяете ваши отношения.