2012-01-23 15 views
6

ORMを使用してテーブルを作成する方法主キーのない宣言的クラス? 列を作成しなかった場合、開始に失敗しましたprimary_key = TrueSQLAlchemy宣言型:プライマリキーのないテーブル?

+0

私は、なぜあなたはそのようなことをしたいと思いますか? –

+0

@JonathanOng後でインデックスを追加したいので、mysqlがこのようなことをすることができるようです。 – Determinant

答えて

11

SQLAlchemyコアは、主キーが欠落していると不平を言っていないので、Table(…)でそのようなテーブルを作成することができます。しかし、ORMはオブジェクトに対応する行を識別する方法を必要とするため、ORMで主キーなしでテーブルを使用することはできません。

なぜこのインデックスを後で追加する必要がありますか?おそらく他の方法で解決することができるいくつかの問題を解決するための実際の要件か試行ですか?コンポジットプライマリキーが必要な場合は、primary_key=True引数を複数のColumnに設定するか、PrimaryKeyConstraint(…)__table_args__に指定して定義することができます。

+0

私はマルチカラムインデックスを作成しようとしています。インデックスがBTREE(私のデータベースはMySQL)を使って構築されなければならないことを明示的に宣言できれば素晴らしいだろう。どんな解決策ですか? – Determinant

+1

ほとんどのデータベース(MySQLを含む)はデフォルトでB-Treeを使用していますので、複合インデックスに参加するすべての 'Column'sに' primary_key = True'を指定してください。明示的なBツリー(または他のタイプ)仕様は 'Index(...) 'でサポートされています。 PostgreSQL用ですが、MySQL用ではなく、 'PrimaryKeyConstraint'ではありません。 SQLAlchemyの機能が欠けているように見えます。 –

+6

"primary_key"引数の "primary"のリストをmapper()に宣言的な '__mapper_args__ = {" primary_key ":(col1、col2)}}' – zzzeek

関連する問題