我有一个 SQLAlchemy 模型,其中有一个从 HTML 表单填充的整数列(我正在使用 Flask 和 WTForms-alchemy,并且我试图避免在路由中编写自定义代码)。如果用户没有在表单上输入该整数的值,则从表单填充对象的代码最终会尝试为该列放入一个空字符串,并且 MySQL 会抱怨这不是一个整数值。为了帮助人们搜索:我开始遇到的错误Incorrect integer value: '' for column ...
.
我不想使用sql_mode=''
hack,人们建议这样做,以便让 MySQL 回到旧的行为,只要给它不正确的数据就进行猜测,因为我无法控制最终将使用的 MySQL 服务器。
我想要的是类似于默认列规范的东西,除了在没有任何内容传入时指定默认值,我想拦截尝试放入空字符串并将其替换为 None ,我认为这会被转换为当它进入数据库时为 null。
有没有办法在模型定义中做到这一点?我意识到这可能会导致性能下降,但吞吐量在此应用程序中并不是什么大问题。
我找到了一个方法。这validates
装饰器可以在传入的过程中更改值。我是这样做的:
from sqlalchemy.orm import validates
class Task(Base):
__tablename__ = 'task'
id = Column(INTEGER(11), primary_key=True)
time_per_unit = Column(INTEGER(11))
@validates('time_per_unit')
def empty_string_to_null(self, key, value):
if isinstance(value,str) and value == '':
return None
else:
return value
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)