2012-09-18 5 views
0

Elixir에서 SQLAlchemy를 사용하고 있으며 모든 것이 SQLite를 사용하여 잘 작동합니다. 그러나 MySQL로 전환 할 때 테이블 이름과 열 이름 길이 제한 (64 자)이 있습니다. 많은 ManyToMany 관계가있는 엔티티가 상당히 많았고 자동화 된 방식으로 MyFirstEntity_rel_otherEntities__MySecondEntity_rel_theFirstEntities 같은 긴 테이블 이름을 클램핑하는 방법을 찾지 못했습니다.SQLAlchemy와 Elixir를 사용하는 MySQL 식별자 (테이블 이름, 열 이름)의 길이 제한

ManyToOne 관계의 외래 키 열 이름은 클래스 및 관계 이름에 따라 너무 깁니다. create_engine("...", label_length = 64)은 트릭을하지 않았고 이미 전체 파이썬 모듈 이름이 접두사로 사용되는 것을 피하기 위해 shortcolumns = True을 사용합니다.

내가 보는 유일한 방법은 전체 스키마를 살펴보고 ManyToMany 관계의 경우 tablename을, ManyToOne 관계의 경우 columnname을 수동으로 정의하는 것입니다. 다른 옵션이 있습니까?

+0

MySQL의 64 자 제한을 초과하는 모든 관계에 대해 선택적 매개 변수 colname (ManyToOne) 및 tablename (ManyToMany)을 사용하여이 문제를 해결했습니다. 그러나보다 쉽고 자동화 된 솔루션이 있는지 궁금합니다. – Daniel

답변

0

예,이보다 자동 솔루션 :

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

이 테이블이 자신의 짧은 이름 (즉, 모델 이름 만에 의해 참조되는 원인이됩니다하십시오 TABLENAME 재 정의와 기본 불로 불사의 영약 옵션을 업데이트).