データベーステーブルをオブジェクトの属性にマッピングする
-
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つのマッピングが必要です。別の場所で2番目のマッピングにアクセスしなくてもかまいません。 work
マッピングは、 variant
マッピングと1対多の関係を持つ必要があります。これにより、リレーションシップを定義する属性の特定の work
に関連付けられた variant
インスタンスのリストが表示されます。
所属していません StackOverflow