【问题标题】:Length Limit for MySQL Identifiers (table names, column names) using SQLAlchemy with Elixir使用 SQLAlchemy 和 Elixir 的 MySQL 标识符(表名、列名)的长度限制
【发布时间】:2012-09-10 23:49:51
【问题描述】:

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

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

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

【问题讨论】:

  • 我通过对所有超过 MySQL 64 个字符限制的关系使用可选参数 colname (ManyToOne) 和 tablename (ManyToMany) 解决了这个问题。但是,我想知道是否有更简单、更自动化的解决方案。

标签: python mysql sqlalchemy python-elixir


【解决方案1】:

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

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

这将导致通过短名称(即仅模型名称)引用表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2015-01-06
    • 2018-01-20
    • 2020-04-25
    • 1970-01-01
    相关资源
    最近更新 更多