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

如何通过循环批量清理SQLite数据库中多表重复数据?

批量清理SQLite多表重复数据的实现方法

SQLite本身不支持原生的SQL循环语句,需要借助外部脚本或编程语言来批量遍历表并执行清理操作,以下是两种实用方案:

方案一:Shell脚本(适用于Linux/macOS)

  1. 导出所有表名到临时文件
sqlite3 your_database.db "SELECT name FROM sqlite_master WHERE type='table';" > tables.txt
  1. 编写循环脚本执行清理
#!/bin/bash
# 替换为你的数据库文件名
DB="your_database.db"

# 遍历所有表名执行删除语句
for TABLE in $(cat tables.txt); do
  sqlite3 $DB "DELETE FROM \"$TABLE\" WHERE EXISTS (SELECT 1 FROM \"$TABLE\" p2 WHERE \"$TABLE\".date = p2.date AND \"$TABLE\".ROWID > p2.ROWID);"
  echo "已完成表 $TABLE 的重复数据清理"
done

方案二:Python脚本(跨平台通用)

用Python连接数据库,批量处理所有表,还能直观看到删除的行数:

import sqlite3

# 替换为你的数据库路径
db_path = "your_database.db"

# 建立数据库连接
conn = sqlite3.connect(db_path)
cursor = conn.cursor()

# 获取所有用户表名
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
tables = [row[0] for row in cursor.fetchall()]

# 逐个清理重复数据
for table in tables:
    # 拼接删除SQL,用双引号包裹表名避免特殊字符冲突
    delete_sql = f'''
    DELETE FROM "{table}"
    WHERE EXISTS (
        SELECT 1 FROM "{table}" p2
        WHERE "{table}".date = p2.date
        AND "{table}".ROWID > p2.ROWID
    )
    '''
    cursor.execute(delete_sql)
    print(f"表 {table} 清理完成,删除重复数据 {cursor.rowcount} 条")

# 提交修改并关闭连接
conn.commit()
conn.close()

注意事项

  • 先备份数据库:执行删除操作前务必备份,避免数据丢失,备份命令:sqlite3 your_database.db ".backup backup_$(date +%Y%m%d).db"
  • 若表名包含空格、SQL关键字等特殊字符,必须用双引号包裹表名,上述两种方案已做处理
  • 确保所有表确实包含date列和ROWID(SQLite默认给表添加ROWID,除非用WITHOUT ROWID创建表)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:38:12