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

Python操作SQLite按已获取影片ID查询film表信息失败如何解决?

问题排查与修复方案

核心问题点

  • c.fetchall() 返回的是嵌套元组列表,即使只查询单个字段,每个结果项都是单元素元组(如(1,)),而非直接的ID数值,无法直接作为查询条件使用
  • 循环内的SQL语句错误写死了匹配值'a',没有引用循环变量a,同时未使用参数化查询的规范写法,导致查询条件完全不符合预期

修复后的代码

import sqlite3

# 连接数据库
conn = sqlite3.connect('sakila.db')
c = conn.cursor()

# 检查数据库连接状态
if conn:
    print("Connection successful")
else:
    print("Connection unsuccessful")

kategorija = input("Enter the category: ")
c.execute("SELECT DISTINCT FID FROM film_list WHERE category=?", (kategorija,))
# 提取纯ID列表,解决嵌套元组问题
filmid_list = [item[0] for item in c.fetchall()]
print(filmid_list)

result = []
for fid in filmid_list:
    # 使用参数化查询传入ID,不写死条件、不手动拼接字符串
    c.execute("SELECT title,release_year FROM film WHERE film_id = ?", (fid,))
    result.append(c.fetchone())
print(result)

优化方案(可选,性能更高)

无需循环多次查询数据库,可直接用联表查询一次性拿到所有需要的结果,减少数据库IO开销:

import sqlite3

conn = sqlite3.connect('sakila.db')
c = conn.cursor()

kategorija = input("Enter the category: ")
c.execute("""
    SELECT DISTINCT f.title, f.release_year 
    FROM film f
    JOIN film_list fl ON f.film_id = fl.FID
    WHERE fl.category = ?
""", (kategorija,))
result = c.fetchall()
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:36:04