0

Elixir で SQLAlchemy を使用していますが、SQLite を使用するとすべて正常に動作します。ただし、MySQL に切り替えると、テーブル名とカラム名の長さ制限 (64 文字) があります。いくつかの ManyToMany 関係を持つエンティティが非常に多くMyFirstEntity_rel_otherEntities__MySecondEntity_rel_theFirstEntities、自動化された方法のように結果の長いテーブル名をクランプする方法が見つかりませんでした。

クラスとリレーション名によっては、ManyToOne リレーションシップの外部キー列名が長すぎます。create_engine("...", label_length = 64)トリックを実行しなかっshortcolumns = Trueたため、Python モジュール名全体をプレフィックスとして使用することを回避するために既に使用しています。

私が見る唯一の方法は、スキーマ全体を調べて、tablename (ManyToMany 関係の場合) と columnname (ManyToOne 関係の場合) を手動で定義することです。他のオプションはありますか?

4

1 に答える 1

0

はい、もっと自動的な解決策があります: テーブル名の再定義でデフォルトの elixir オプションを更新します:

elixir.options_defaults.update(
    dict(
        tablename = lambda cls: cls.__name__.lower()
    )
)

これにより、テーブルが短い名前 (つまり、モデル名のみ) で参照されるようになります。

于 2013-03-04T01:09:34.277 に答える