我通过SQLAlchemy模型将数据插入MySQL。最近,这个应用程序针对配置了STRICT_TRANS_TABLES
的MySQL运行,并且应用程序偶尔会失败,因为数据对于列错误来说太长了。
我知道我可以为我的会话禁用严格 sql_mode(例如此处MySQL too long varchar truncation/error setting),
但我很好奇SQLAlchemy是否可以为列数据强制执行max String()长度。文档说,String()
长度仅适用于CREATE TABLE
。我的问题:
答案 0 :(得分:7)
如果你想通过在python / sqlalchemy端自动截断它来enfoce
最大长度,我认为使用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