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

如何将SQLite SELECT语句的结果项逐个添加到列表中?

高效实现方法

首先,你当前的代码存在两个关键问题:

  1. 使用f-string拼接SQL语句会引发SQL注入风险,这是严重的安全漏洞,必须杜绝。
  2. cursor.fetchone()仅能获取查询结果的第一条记录,而你需要最近5局数据,应该用fetchall()获取所有匹配的记录。

针对你的需求,只需要一次SQL查询就能完成,无需重复执行多次查询,具体代码如下:

playeroutcomes = []
# 使用参数化查询,用?作为占位符,彻底避免SQL注入
cursor.execute("""
    SELECT P1_Outcome, P2_Outcome, P3_Outcome, P4_Outcome, P5_Outcome 
    FROM Game_History 
    WHERE username = ? 
    ORDER BY RecordID DESC 
    LIMIT 5
""", (username,))

# 遍历查询到的每一条记录(对应最近5局游戏)
for record in cursor.fetchall():
    # 遍历当前记录中的每个结果项(P1到P5),逐个添加到目标列表
    for outcome in record:
        playeroutcomes.append(outcome)

额外优化建议:调整表结构

从你的需求来看,当前表结构设计不够合理——如果P1_Outcome到P5_Outcome是同一玩家的5局游戏结果,更规范的设计是每局游戏对应一条独立记录,表字段可设置为:

  • RecordID(自增主键)
  • username(玩家用户名)
  • outcome(单局游戏结果)

调整后,查询最近5局的代码会更简洁直观:

playeroutcomes = []
cursor.execute("""
    SELECT outcome 
    FROM Game_History 
    WHERE username = ? 
    ORDER BY RecordID DESC 
    LIMIT 5
""", (username,))

# 直接提取每局结果到列表
playeroutcomes = [row[0] for row in cursor.fetchall()]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:43:16