当前位置: 首页 > news >正文

SQLAlchemy 插入数据报错:Data too long for column ‘password_hash’

数据过长导致插入失败:尝试写入 users 表的 password_hash 列的值超过了该列允许的最大长度。
在使用 SQLAlchemy + MySQL 时,我遇到了一个常见但容易忽略的问题:插入用户密码哈希时,报错如下:
sqlalchemy.exc.DataError: (pymysql.err.DataError) (1406, “Data too long for column ‘password_hash’ at row 1”)

一、错误原因分析

从报错信息可以看出,这是 数据过长 导致的错误(MySQL 错误码 1406)。具体原因如下:

我使用了 scrypt 算法生成密码哈希。

scrypt 哈希字符串通常很长,例如:
scrypt:32768:8:1$VlHH97jhtTsuwxnr$7d4e22e6fd6bafc007dc31bbd7d735bd3d632599bdb26bee907ad8c528b8caf3a209ab6e636668195517afd89b90f4e3e70c7cdb84f21d8b0104b0693405c9c0

而数据库表 users 中 password_hash 列原本定义为 VARCHAR(255),显然无法存下如此长的字符串,因此插入失败。

二、解决方案

1. 修改数据库列长度
可以将 password_hash 列长度增大,例如 1024:

ALTER TABLE users MODIFY COLUMN password_hash VARCHAR(1024);

如果未来可能使用更长的哈希算法,建议直接使用 TEXT 类型:

ALTER TABLE users MODIFY COLUMN password_hash TEXT;

注意:在执行 ALTER TABLE 语句之前,要先选择数据库:

USE your_database_name;

2. 确保 SQLAlchemy 模型同步
如果你使用 ORM 模型,也要保证列长度一致,例如:

from sqlalchemy import Column, String, Text

# 如果使用 VARCHAR(1024)
password_hash = Column(String(1024))

# 如果使用 TEXT
password_hash = Column(Text)

3. 插入数据验证
修改完成后,再执行原来的插入操作:

new_user = User(
username=’admin’,
password_hash=hashed_password,
email=’example@qq.com’
)
session.add(new_user)
session.commit()

这时候就不会再报 Data too long 错误。

三、结语

错误本质:插入的数据长度超过数据库列定义长度。
解决思路:增加列长度或改为 TEXT,并确保 ORM 模型同步。
经验提示:现代哈希算法(如 scrypt、bcrypt、argon2)生成的哈希字符串通常超过 255 字符,建议直接使用 VARCHAR(1024) 或 TEXT 类型。

http://www.dtcms.com/a/593386.html

相关文章:

  • 政务内网网站群建设方案网页设计模板 中文
  • 互联网大厂Java求职面试实战:Spring Boot到Kubernetes的技术问答
  • 合规安全的整形医院系统服务商排名
  • 贵州贵州省住房和城乡建设厅网站做游戏音频下载网站
  • 块状数组超级兵器:区间动态排名问题
  • 在网站开发中如何设置用户登录网站查看
  • SAP FICO资产主数据创建接口
  • 『 QT 』显示类控件 (一)
  • 网站建设彳金手指排名wordpress电子书插件
  • 石狮网站建设科技vmware做网站步骤
  • 全国网站建设公司排名泰安市人才交流服务中心
  • C++双向链表删除操作:由浅入深完全指南
  • 云手机轻松玩转网络手游
  • 手机拍照明晰度评估:传感器尺寸像素数量与处理器算法解析
  • Web VIVO手机商城网站项目4页面
  • 【杂谈】-人工智能时代的基础设施变革:引领未来十年科技发展的关键
  • 有关网络技术的网站iis7 建立网站
  • vue提交代码报错---eslint检查
  • 天津外贸公司网站制作wordpress中国区官方论坛
  • 成都企业网站商城定制网络推广方案包括哪些内容
  • 商城网站建设机构怎样做展示型网站
  • Rust类型系统奇技淫巧:幽灵类型(PhantomData)——理解编译器与类型安全
  • Visual Studio Code 之C/C++开发编译环境搭建
  • 长沙网站制造太原网站建设注意
  • PortSwigger靶场之SSRF with whitelist-based input filter通关秘籍
  • 太原网站快速排名提升手机商城网站制作公司
  • Redis 核心命令速查表
  • 中药饮片批发市场如何提升产品质量以迎合客户需求?
  • k8s中应用容器随redis集群自动重启
  • C语言结构体入门与实践:打造你的“数据百宝箱”