切换至Snowflake后Python邮件发送应用无法发件的问题排查
问题解决:Snowflake execute参数导致TypeError
错误根源
报错TypeError: object of type 'int' has no len()是因为Snowflake Python连接器要求execute方法的参数必须是序列类型(元组、列表等),但你传入的(retailer[0])并不是元组——括号在这里仅作为优先级符号,实际传递的是单个int对象,连接器尝试获取其长度时触发错误。
而之前SQL Server能正常运行,是因为SQL Server的连接器(如pyodbc)允许直接传递单个参数,不需要包装成序列,两者的参数处理规则存在差异。
修复方案
修改execute语句的参数部分,将单个参数包装成带逗号的元组(元组定义必须有逗号区分单个元素和普通括号),或者用列表:
方案1:使用带逗号的元组
c.execute("""SELECT Retailer, Retailer_Name, Contact, E_Mail, Account_ID, Password FROM Retailers WHERE Retailer =? """, (retailer[0],))
方案2:使用列表
c.execute("""SELECT Retailer, Retailer_Name, Contact, E_Mail, Account_ID, Password FROM Retailers WHERE Retailer =? """, [retailer[0]])
额外验证
确保retailer[0]的类型与Snowflake表中Retailer字段的类型一致(比如都是整数),避免后续出现类型不匹配的查询问题。
内容的提问来源于stack exchange,提问作者Calogero Savarino
相关产品推荐
相关产品推荐

