私は現在のプロジェクトの中で、複雑なデータ構造をメモリに格納するためのいくつかのクラスを作成しました。データベース。 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 ;
は、これは完全なデータベースのほんの一部であり、同じことは、いくつかの場所で必要とされようとしています。
これは、私が望むものとほとんど同じように聞こえる。バリアントのためのPythonクラスを特別に用意することなく、これを行う方法はありますか?あるいは、シンプルであるにもかかわらず、これらの要素のそれぞれにクラスを持たなければなりませんか? – workmad3
SQLAlchemy ORMのクラスは必要ありません。 ORMマッピングなしでテーブルを照会するだけで済みます。明示的なfetchall()を使用すると、すべての行を取得できます。あなたは辞書のリストを取得します。 –
S.Lottが正しいです、あなたは各テーブルのためのクラスを持つ必要はありません。しかし、私はとにかくそれらを作成します。あなたのコードのどこかで、バリアントを操作したいと思うかもしれませんし、マッピングを行うことが、作業マッピングに機能を付加するよりも実際的であるかもしれません。 – muhuk