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

如何用Python按YYMMDD格式查询SQLite表中单日所有数据行

按日期分组提取SQLite数据库中单日数据的Python实现

需求说明

现有SQLite数据库中的Someday表,结构为(date, high, low, volume),其中date字段存储格式为YYYYMMDDHHMM(如202207280901)。需要用Python按YYYYMMDD格式筛选并获取单日的所有数据行,最终按日期分组输出对应数据。

示例数据

(date, high, low, volume)
(202207280901, 22200, 19500, 434040)
(202207280901, 22200, 19500, 434040)
(202207280903, 23400, 22200, 125861)
...
(202301151519, 22000, 21750, 45180)
(202301151520, 21850, 21450, 30786)
(202301151530, 21850, 21450, 24732)

实现方案

方案一:先获取唯一日期,逐天查询(适合大数据量)

通过SQL先提取所有不重复的日期前缀,再逐个查询单日数据,避免一次性加载全量数据:

import sqlite3

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

# 获取所有唯一的YYYYMMDD格式日期前缀
cursor.execute("SELECT DISTINCT SUBSTR(date, 1, 8) FROM Someday ORDER BY SUBSTR(date, 1, 8)")
unique_dates = [row[0] for row in cursor.fetchall()]

# 循环输出每日数据
for idx, date_prefix in enumerate(unique_dates, 1):
    # 格式化日期为YYYY-MM-DD
    formatted_date = f"{date_prefix[:4]}-{date_prefix[4:6]}-{date_prefix[6:8]}"
    print(f"when i={idx} # {formatted_date} only")
    
    # 查询该日期的所有数据行
    cursor.execute("SELECT * FROM Someday WHERE SUBSTR(date, 1, 8) = ?", (date_prefix,))
    rows = cursor.fetchall()
    
    # 提取所有date字段展示(如需完整数据可直接输出rows)
    date_list = [row[0] for row in rows]
    print(f"row = {date_list}\n")

# 关闭数据库连接
conn.close()

方案二:全量查询后内存分组(适合小数据量)

一次性拉取所有数据,用Python字典按日期前缀分组,执行效率更高:

import sqlite3
from collections import defaultdict

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

# 获取所有数据并按date排序
cursor.execute("SELECT * FROM Someday ORDER BY date")
all_rows = cursor.fetchall()

# 按YYYYMMDD前缀分组存储数据
date_groups = defaultdict(list)
for row in all_rows:
    date_prefix = str(row[0])[:8]
    date_groups[date_prefix].append(row)

# 按日期顺序输出分组结果
for idx, (date_prefix, rows) in enumerate(sorted(date_groups.items()), 1):
    formatted_date = f"{date_prefix[:4]}-{date_prefix[4:6]}-{date_prefix[6:8]}"
    print(f"when i={idx} # {formatted_date} only")
    
    date_list = [row[0] for row in rows]
    print(f"row = {date_list}\n")

# 关闭连接
conn.close()

预期输出

when i=1 # 2022-07-28 only
row = [202207280901,202207280902,..., 202207281430]
when i=2 # 2022-07-29 only
row = [202207290901,202207290902,..., 202207291430]
when i=3 # 2022-07-30 only
row = [202207300901,202207300902,..., 202207301430]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:50:41