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

为何SQLite中同结构函数同类型查询一个有结果一个无结果?

问题原因与解决方案

问题出在SQL参数的传递方式上:

cursor.execute()的第二个参数需要是序列类型(比如元组、列表),每个元素对应SQL语句中的一个占位符。但你的代码里直接传递了字符串,这会导致两种问题:

  1. 若参数是多位数的数字(比如stan_id=123),字符串会被拆分为单个字符序列('1'、'2'、'3'),与SQL中的单个占位符不匹配;
  2. 即使参数是单字符,将整数转成字符串传入,可能与数据库中ulaz_id的整数类型产生隐式转换问题,导致匹配不到数据。

修复后的代码

将两个函数的cursor.execute调用改为传递元组参数,并且不需要手动转成字符串:

修正后的selectAll函数(规范写法)

def selectAll(predstavnik_id):
    q = "SELECT * FROM ulaz WHERE predstavnik_id = (?)"
    cursor.execute(q, (predstavnik_id,))  # 改为元组格式
    rows = cursor.fetchall()
    return rows if rows else None

修正后的selectStanByUlaz函数

def selectStanByUlaz(stan_id):
    q = "SELECT * FROM stan WHERE ulaz_id = (?)"
    cursor.execute(q, (stan_id,))  # 改为元组,无需转字符串
    rows = cursor.fetchall()
    return rows if rows else None

补充说明

  • SQLite会自动处理参数的类型转换,不需要手动将整数转成字符串;
  • 元组写法要注意末尾的逗号:(stan_id,),少了逗号会被当成普通括号包裹,而非元组;
  • 你在SQLite Studio中能正常查询,是因为手动输入的参数类型与数据库字段匹配,而代码中错误的参数传递方式破坏了这种匹配。

内容的提问来源于stack exchange,提问作者zlocko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:56:06