""" 清空SQLite数据库所有表数据 注意:这将删除所有数据,但保留表结构 """ import sqlite3 import sys import os def get_base_path(): """获取程序运行的基础路径""" if getattr(sys, 'frozen', False): return os.path.dirname(sys.executable) else: return os.path.dirname(os.path.abspath(__file__)) def clear_all_tables(): """清空SQLite数据库所有表的数据""" base_path = get_base_path() db_path = os.path.join(base_path, "dibang.db") if not os.path.exists(db_path): print(f"错误: SQLite数据库文件不存在: {db_path}") return False print("=" * 60) print("清空SQLite数据库所有表数据") print("=" * 60) print(f"数据库文件: {db_path}") print("\n⚠️ 警告:此操作将删除所有数据,但保留表结构!") print("将被清空的表:") print(" - weighing_slips (地磅单表)") print(" - purchase_plans (采购计划表)") print(" - companies (公司名称表)") print(" - cargos (货物名称表)") print("=" * 60) # 确认操作 confirm = input("\n确定要清空所有数据吗?(输入 'YES' 确认): ").strip() if confirm != 'YES': print("已取消操作") return False try: conn = sqlite3.connect(db_path) cursor = conn.cursor() # 禁用外键检查 cursor.execute("PRAGMA foreign_keys = OFF") # 清空表(按顺序,考虑外键依赖) tables = [ 'weighing_slips', # 地磅单表 'purchase_plans', # 采购计划表 'companies', # 公司名称表 'cargos' # 货物名称表 ] print("\n开始清空数据...") for table in tables: cursor.execute(f"DELETE FROM {table}") deleted_rows = cursor.rowcount print(f" {table}: 删除了 {deleted_rows} 条记录") # 重置自增ID cursor.execute("DELETE FROM sqlite_sequence WHERE name IN ('weighing_slips', 'purchase_plans', 'companies', 'cargos')") # 提交事务 conn.commit() # 重新启用外键检查 cursor.execute("PRAGMA foreign_keys = ON") # 执行VACUUM以回收空间 print("\n正在回收数据库空间...") conn.execute("VACUUM") conn.close() print("\n✅ 所有表数据已清空!") print(" - weighing_slips: 已清空") print(" - purchase_plans: 已清空") print(" - companies: 已清空") print(" - cargos: 已清空") print(" - 自增ID已重置") print(" - 数据库空间已回收") return True except Exception as e: print(f"\n❌ 清空数据失败: {str(e)}") return False def main(): """主函数""" if clear_all_tables(): print("\n操作完成") else: print("\n操作失败") if __name__ == '__main__': main()