0

我将 SQLAlchemy 与 Elixir 一起使用,使用 SQLite 一切正常。但是,当我切换到 MySQL 时,有一个表名和列名长度限制(64 个字符)。我有很多具有多个 ManyToMany 关系的实体,但我没有找到一种方法来像MyFirstEntity_rel_otherEntities__MySecondEntity_rel_theFirstEntities自动方式那样钳制生成的长表名称。

ManyToOne 关系的外键列名称太长,具体取决于类和关系名称。create_engine("...", label_length = 64)没有做到这一点,我已经用它shortcolumns = True来避免将整个 Python 模块名称也用作前缀。

我看到的唯一方法是遍历整个架构并手动定义表名(对于多对多关系)和列名(对于多对一关系)。还有其他选择吗?

4

1 回答 1

0

是的,有一个更自动的解决方案:使用表名重新定义更新默认的 elixir 选项:

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

这将导致表被它们的短名称引用(即,仅模型名称)。

于 2013-03-04T01:09:34.277 回答