python - 通过 SQLAlchemy 插入 MySQL 时截断太长的 varchar

标签 python mysql sqlalchemy

我正在通过 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。我的问题:

  1. 是否可以在 SQLAlchemy 中强制执行最大长度(截断太长的字符串)?
  2. 我可以为个别列或仅为所有表/数据库中的所有列设置它吗?

最佳答案

如果您想通过在 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/

相关文章:

Python 和 MySQLdb

php - 如何插入多个选择的值

python - 通过 sqlalchemy 关系通过 backref 属性获取 parent 的 child 会导致不必要的刷新

python - 从在所述函数中定义的另一个函数中更改函数的局部变量.. Python

python - 在 Python 中创建网格

python - 文本冒险中匹配用户选择的问题。

mysql - 三个不同表中的最大值

python - sqlalchemy查询相关帖子(按常见的多对多关系排序)

python sqlalchemy 性能?

python - 无法在python中打开VideoCapture