我正在通过 SQLAlchemy 模型将数据插入 MySQL。最近,此应用针对配置了 STRICT_TRANS_TABLES
的 MySQL 运行,应用偶尔会因Data too long for column错误而失败。
我知道我可以为我的 session 禁用 strict sql_mode(就像这里的 MySQL too long varchar truncation/error setting ),
但我很好奇 SQLAlchemy 是否可以强制列数据的最大 String() 长度。文档说,String()
长度仅适用于 CREATE TABLE
。我的问题:
- 是否可以在 SQLAlchemy 中强制执行最大长度(截断太长的字符串)?
- 我可以为个别列或仅为所有表/数据库中的所有列设置它吗?
最佳答案
如果您想通过在 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
关于python - 通过 SQLAlchemy 插入 MySQL 时截断太长的 varchar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32364499/