| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- """
- 清空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()
|