2015-09-02 2 views
2

Я вставляю данные в MySQL через модели SQLAlchemy. В последнее время это приложение работает с MySQL, настроенным с STRICT_TRANS_TABLES, и приложение иногда не работает из-за Данные слишком длинны для столбца ошибки.Усечение слишком длинного varchar при вставке в MySQL через SQLAlchemy

Я знаю, что я могу отключить строгую sql_mode для моей сессии (как здесь MySQL too long varchar truncation/error setting),

, но мне было интересно, если SQLAlchemy может обеспечивать длину макс String() для данных столбцов. Документация говорит, что длина String() предназначена только для CREATE TABLE. Мой вопрос:

  1. Можно ли обеспечить максимальную длину (обрезать слишком длинные строки) в SQLAlchemy?
  2. Могу ли я установить его для отдельных столбцов или для всех столбцов во всех таблицах/базе данных?

ответ

5

Если вы хотите enfoce максимальную длину, автоматически усечения его на стороне питон/SQLAlchemy, я думаю, что с помощью Simple Validators это самый простой способ для достижения этой цели:

class MyTable(Base): 
    __tablename__ = 'my_table' 

    id = Column(Integer, primary_key=True) 
    code = Column(String(4)) 
    name = Column(String(10)) 

    @validates('code', 'name') 
    def validate_code(self, key, value): 
     max_len = getattr(self.__class__, key).prop.columns[0].type.length 
     if value and len(value) > max_len: 
      return value[:max_len] 
     return value 
Смежные вопросы