如何为可返回多值的函数设置类型提示?解决MySQL查询函数mypy报错
解决MySQL查询函数的mypy类型提示问题
方法1:显式类型转换(推荐)
既然你确认返回的value是str或None,可以在列表推导中显式处理类型,让mypy识别:
return [str(value) if value is not None else None for value, _ in result]
这种方式既保证运行时类型正确,也能让类型检查器认可返回值符合List[Optional[str]]的要求。
方法2:用typing.cast强制标注类型
如果不想做实际类型转换,仅需告知mypy类型信息,可以使用cast:
from typing import cast, List, Optional # ... 函数其他代码 ... result = cursor.fetchall() return cast(List[Optional[str]], [value for value, _ in result])
cast不会改变运行时行为,仅为类型检查器提供类型提示。
方法3:给查询结果添加精确类型注解
提前给result标注具体的元组类型,明确元素类型:
from typing import List, Tuple, Optional, Any # ... 函数其他代码 ... result: List[Tuple[Optional[str], Any]] = cursor.fetchall() return [value for value, _ in result]
通过指定result是包含(Optional[str], Any)元组的列表,mypy就能自动推导出返回列表的类型符合要求。
额外提醒:规避SQL注入风险
你当前手动拼接参数字符串(比如param1_str = ",".join([f"'{lob}'" for lob in param1]))存在严重的SQL注入风险,建议改用数据库驱动的参数化查询能力处理IN子句,比如通过占位符配合参数列表传递,而非手动拼接带引号的字符串。
内容的提问来源于stack exchange,提问作者Vandit Goel
相关产品推荐
相关产品推荐

