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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:24:04