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

Python执行SQLite查询返回重复结果问题求助

解决SQLite查询结果重复输出的问题

问题分析

从你的输出可以看到,查询结果列表被打印了两次,这通常不是数据库返回了重复记录,而是你的print(read_query(q1))语句被执行了两次;当然也需要先确认数据库中是否真的存在两条记录。

解决方案步骤

1. 先确认数据库中的实际记录数

打开终端执行以下命令,直接查询目标日期的记录数量:

sqlite3 database.db "SELECT COUNT(*) FROM bookings WHERE strftime('%Y-%m-%d', booked_time) = '2023-09-04';"
  • 如果返回结果是1:说明数据库中只有一条记录,重复输出是代码执行两次导致的。
  • 如果返回结果是2:说明数据库中确实有两条记录,需要检查插入逻辑。

2. 解决代码重复执行的问题

如果数据库中只有一条记录,大概率是你的查询代码被执行了两次,比如:

  • 你的schedule.py被其他文件(如Flask的app文件)导入,导致顶层的print语句在导入时执行了一次,直接运行schedule.py时又执行一次。
  • 修复方法:将查询和打印代码放入if __name__ == '__main__':块中,确保只有直接运行该文件时才执行:
from flask import request
import sqlite3

def read_query(query):
    # 用上下文管理器优化连接,自动关闭
    with sqlite3.connect("database.db") as con:
        cur = con.cursor()
        cur.execute(query)
        result = cur.fetchall()
        return result

# 仅在直接运行该文件时执行查询和打印
if __name__ == '__main__':
    q1 = """
    SELECT email,booked_time,strftime('%Y-%m-%d',booked_time) as 'date'
    FROM bookings
    WHERE date = DATE('2023-09-04');
    """
    print(read_query(q1))

3. 排查数据库重复记录的可能(如果步骤1返回2)

虽然你的booked_time字段设置了UNIQUE约束,但如果插入的时间字符串存在细微差异(比如末尾空格、格式不一致),SQLite会认为是不同的值,从而允许插入。执行以下命令查看具体的booked_time值:

sqlite3 database.db "SELECT id, booked_time FROM bookings WHERE strftime('%Y-%m-%d', booked_time) = '2023-09-04';"
  • 如果发现booked_time有差异,检查Flask插入代码中的booked_time拼接逻辑,确保格式统一:
    # 改用datetime格式化,避免拼接错误
    from datetime import datetime
    booked_time = datetime.strptime(f"{date} {hour}:{minutes}", "%Y-%m-%d %H:%M").strftime("%Y-%m-%d %H:%M:%S")
    
  • 另外,Flask的process函数中con.close()在return msg之后,永远不会执行,但这不影响插入,上下文管理器已经自动处理了资源释放。

4. 优化查询语句(可选)

你的查询语句中使用了别名date作为WHERE条件,SQLite支持这种写法,但更严谨的写法可以直接在WHERE子句中处理,避免歧义:

SELECT email, booked_time, strftime('%Y-%m-%d', booked_time) as date
FROM bookings
WHERE strftime('%Y-%m-%d', booked_time) = '2023-09-04';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:42:46