2015-09-02 35 views
2
插入到MySQL時

我通過SQLAlchemy的模型將數據插入到MySQL截斷過長VARCHAR。近日,這個程序是針對與STRICT_TRANS_TABLES和應用程序配置的MySQL運行失敗,因爲數據偶爾太長列錯誤。通過SQLAlchemy的

我知道我可以禁用嚴格的sql_mode我的會話(如這裏MySQL too long varchar truncation/error setting),

,但我很好奇,如果SQLAlchemy的可以強制執行最大字符串()長度列數據。文檔說明,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