clear_sqlite_data.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. """
  2. 清空SQLite数据库所有表数据
  3. 注意:这将删除所有数据,但保留表结构
  4. """
  5. import sqlite3
  6. import sys
  7. import os
  8. def get_base_path():
  9. """获取程序运行的基础路径"""
  10. if getattr(sys, 'frozen', False):
  11. return os.path.dirname(sys.executable)
  12. else:
  13. return os.path.dirname(os.path.abspath(__file__))
  14. def clear_all_tables():
  15. """清空SQLite数据库所有表的数据"""
  16. base_path = get_base_path()
  17. db_path = os.path.join(base_path, "dibang.db")
  18. if not os.path.exists(db_path):
  19. print(f"错误: SQLite数据库文件不存在: {db_path}")
  20. return False
  21. print("=" * 60)
  22. print("清空SQLite数据库所有表数据")
  23. print("=" * 60)
  24. print(f"数据库文件: {db_path}")
  25. print("\n⚠️ 警告:此操作将删除所有数据,但保留表结构!")
  26. print("将被清空的表:")
  27. print(" - weighing_slips (地磅单表)")
  28. print(" - purchase_plans (采购计划表)")
  29. print(" - companies (公司名称表)")
  30. print(" - cargos (货物名称表)")
  31. print("=" * 60)
  32. # 确认操作
  33. confirm = input("\n确定要清空所有数据吗?(输入 'YES' 确认): ").strip()
  34. if confirm != 'YES':
  35. print("已取消操作")
  36. return False
  37. try:
  38. conn = sqlite3.connect(db_path)
  39. cursor = conn.cursor()
  40. # 禁用外键检查
  41. cursor.execute("PRAGMA foreign_keys = OFF")
  42. # 清空表(按顺序,考虑外键依赖)
  43. tables = [
  44. 'weighing_slips', # 地磅单表
  45. 'purchase_plans', # 采购计划表
  46. 'companies', # 公司名称表
  47. 'cargos' # 货物名称表
  48. ]
  49. print("\n开始清空数据...")
  50. for table in tables:
  51. cursor.execute(f"DELETE FROM {table}")
  52. deleted_rows = cursor.rowcount
  53. print(f" {table}: 删除了 {deleted_rows} 条记录")
  54. # 重置自增ID
  55. cursor.execute("DELETE FROM sqlite_sequence WHERE name IN ('weighing_slips', 'purchase_plans', 'companies', 'cargos')")
  56. # 提交事务
  57. conn.commit()
  58. # 重新启用外键检查
  59. cursor.execute("PRAGMA foreign_keys = ON")
  60. # 执行VACUUM以回收空间
  61. print("\n正在回收数据库空间...")
  62. conn.execute("VACUUM")
  63. conn.close()
  64. print("\n✅ 所有表数据已清空!")
  65. print(" - weighing_slips: 已清空")
  66. print(" - purchase_plans: 已清空")
  67. print(" - companies: 已清空")
  68. print(" - cargos: 已清空")
  69. print(" - 自增ID已重置")
  70. print(" - 数据库空间已回收")
  71. return True
  72. except Exception as e:
  73. print(f"\n❌ 清空数据失败: {str(e)}")
  74. return False
  75. def main():
  76. """主函数"""
  77. if clear_all_tables():
  78. print("\n操作完成")
  79. else:
  80. print("\n操作失败")
  81. if __name__ == '__main__':
  82. main()