gpt4 book ai didi

python - SQLAlchemy——我可以在 DDL 中将空字符串映射到 null 吗?我想要一个可为空的整数列在插入或更新时将 '' 转换为 NULL

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:25 26 4
gpt4 key购买 nike

我有一个 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

关于python - SQLAlchemy——我可以在 DDL 中将空字符串映射到 null 吗?我想要一个可为空的整数列在插入或更新时将 '' 转换为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57291723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com