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

sqlite3使用AND运算符执行SELECT查询无返回结果的问题

问题原因排查
  • Python 逻辑运算符or的求值不符合预期
    非空字符串在Python中布尔值为True,你的lista[0]值为"David"属于真值,所以lista[0] or lista[1]的返回值固定为lista[0]也就是"David",不会触发取lista[1]的逻辑。最终拼接出来的实际执行SQL为:
    SELECT * FROM persoane WHERE nume = 'David' AND prenume = 'David'
    
    你插入的测试数据里nume字段值为Mustea、prenume字段值为David,没有同时满足两个字段都为David的记录,自然没有查询结果。
  • 业务逻辑与运算符使用不匹配
    你想要实现的逻辑应该是nume匹配列表任意值且prenume匹配列表任意值,这类场景应该使用SQL的IN运算符,而不是在Python侧用or求值。
  • 额外风险:f字符串拼接SQL存在SQL注入漏洞
    直接将变量拼接入SQL语句会被恶意构造的字符串篡改SQL逻辑,必须使用SQLite参数化查询写法。
修复方案

方案1:严格匹配姓名顺序(nume为Mustea、prenume为David)

如果你的列表存储顺序为[prenume, nume],要严格对应字段顺序查询,写法如下:

import sqlite3

conn = sqlite3.connect("db_informatii_principal.db")
c = conn.cursor()

# 建表、插数据逻辑和之前一致
lista = ["David", "Mustea"]
# 用?做占位符的参数化查询,按顺序传参
c.execute("SELECT * FROM persoane WHERE nume = ? AND prenume = ?", (lista[1], lista[0]))

for x in c.fetchall():
    print(x)

方案2:不匹配姓名顺序,只要两个字段分别在列表中存在

如果需要实现nume和prenume分别匹配列表任意值、不限制顺序,写法如下:

lista = ["David", "Mustea"]
c.execute("SELECT * FROM persoane WHERE nume IN (?, ?) AND prenume IN (?, ?)", (lista[0], lista[1], lista[0], lista[1]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 13:00:04