如何在SQLite3中删除日份为26的日期数据?
解决步骤
你原来的代码有几个关键问题:
- SQL里判断相等用单
=,不是== - 你要找的是所有日份为26的记录,不是等于某个特定日期值,得用日期函数提取日期里的“日”部分
先别着急删,先跑查询确认目标记录,避免误删:
第一步:查询所有日份为26的记录
根据你使用的数据库类型,选择对应语句:
如果你用的是SQLite(比如Python自带的sqlite3)
CURSOR.execute(f"SELECT * FROM {name}_schedule WHERE strftime('%d', date) = '26'") # 打印结果确认是否是你要删的记录 records = CURSOR.fetchall() print(records)
strftime('%d', date)是从date字段提取两位日份(比如'26'),再判断是否等于目标值。
如果你用的是MySQL
CURSOR.execute(f"SELECT * FROM {name}_schedule WHERE DAY(date) = 26") records = CURSOR.fetchall() print(records)
DAY(date)会直接返回日期里的日份数字(比如26)。
如果你用的是PostgreSQL
CURSOR.execute(f"SELECT * FROM {name}_schedule WHERE EXTRACT(DAY FROM date) = 26") # 也可以用DAY函数:CURSOR.execute(f"SELECT * FROM {name}_schedule WHERE DAY(date) = 26") records = CURSOR.fetchall() print(records)
第二步:确认无误后执行删除
把上面的SELECT *改成DELETE即可,注意:删除后无法恢复,一定要先备份数据库或确认查询结果正确!
SQLite删除语句
CURSOR.execute(f"DELETE FROM {name}_schedule WHERE strftime('%d', date) = '26'") # 记得提交事务(sqlite3需要这一步) CONNECTION.commit()
MySQL删除语句
CURSOR.execute(f"DELETE FROM {name}_schedule WHERE DAY(date) = 26") CONNECTION.commit()
PostgreSQL删除语句
CURSOR.execute(f"DELETE FROM {name}_schedule WHERE EXTRACT(DAY FROM date) = 26") CONNECTION.commit()
如果你的date字段不是标准日期类型(比如是字符串格式的'20240526'),可以用字符串截取的方式匹配,比如SQLite里用SUBSTR(date, 7, 2) = '26',你可以补充字段格式再调整语句。
内容的提问来源于stack exchange,提问作者PR. OR
相关产品推荐
相关产品推荐

