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