You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask-SQLAlchemy导入CSV时将"True"/"False"转布尔值且保留其他字符串的方法

解决方案

你只需要加一个轻量的类型转换函数,仅对匹配到的"True"/"False"字符串做布尔转换,其余值原样返回即可,完全不需要绑定列名,也不会破坏原有代码逻辑。

第一步:定义转换函数

def convert_bool(value: str):
    # 严格匹配csv.DictWriter输出的布尔字符串格式
    if value == "True":
        return True
    elif value == "False":
        return False
    # 其余所有类型/值直接返回不处理
    return value

如果需要兼容大小写、前后带空格的异常输入,可以用增强版函数:

def convert_bool(value: str):
    if not isinstance(value, str):
        return value
    cleaned = value.strip().lower()
    if cleaned == "true":
        return True
    elif cleaned == "false":
        return False
    return value

第二步:修改原有赋值逻辑

仅需要在setattr时给值过一遍转换函数即可,其余代码完全不用改:

reader = csv.DictReader(fh)
...
for row in reader:
...
    contact = Contact.query.get(row['id'])
    for key, value in row.items():
        setattr(contact, key, convert_bool(value))

方案优势

  • 完全不依赖表结构、字段名,后续修改模型字段不需要调整转换逻辑
  • 没有额外依赖,不会像ast.literal_eval一样遇到非布尔字符串抛出异常
  • 性能开销极低,仅做2次字符串判断就可以完成转换

内容的提问来源于stack exchange,提问作者Darwin von Corax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:54:04