FastAPI查询PostgreSQL多位数ID报TypeError字符串格式化错误
问题根因
Python数据库API规范中,cursor.execute()的第二个参数必须传入由查询参数组成的序列(通常是元组/列表),你当前直接传入了str(id):
- 单数字ID转字符串后长度为1,字符串作为可迭代对象会被拆分为1个字符参数,刚好匹配SQL语句中的1个
%s占位符,因此运行正常 - 多位数ID转字符串后长度大于1,会被拆分为和位数数量相同的多个字符参数,和仅有的1个占位符数量不匹配,因此抛出参数转换错误。
修复方案
将传入的参数改为单元素元组即可,注意单元素元组末尾必须加逗号,否则会被识别为普通运算表达式。同时ID本身已经是int类型,不需要手动转字符串,数据库驱动会自动完成类型适配。
修改后的接口代码如下:
@user.get("/users/{id}") def get_user(id: int): connect_db() mycur = myconn.cursor() query = ''' SELECT * FROM employees WHERE id = %s ''' # 第二个参数改为(id,)元组格式 mycur.execute(query, (id,)) return mycur.fetchone()
额外优化建议:生产环境使用时建议用完游标和数据库连接后及时关闭,避免连接泄漏。
内容的提问来源于stack exchange,提问作者Alejandro Mendoza
相关产品推荐
相关产品推荐

