使用SQLAlchemy和Elixir的MySQL标识符(表名,列名)的长度限制

时间:2012-09-18 17:02:16

标签: python mysql sqlalchemy python-elixir

我正在使用SQLAlchemy和Elixir,使用SQLite一切正常。但是,当我切换到MySQL时,有一个表名和列名长度限制(64个字符)。我有很多具有多个ManyToMany关系的实体,但我没有找到一种方法来自动地将结果长表名称为MyFirstEntity_rel_otherEntities__MySecondEntity_rel_theFirstEntities

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

我看到的唯一方法是遍历整个模式并手动定义tablename(对于ManyToMany关系)和columnname(对于ManyToOne关系)。还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

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

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

这将导致表格以其短名称引用(即仅限型号名称)。