create_wechat_user_table.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. 在Flask应用上下文中创建微信用户表
  5. 使用SQLAlchemy创建表结构
  6. """
  7. import os
  8. import sys
  9. import logging
  10. # 添加项目根目录到Python路径
  11. sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../..')))
  12. from app import create_app, db
  13. from app.core.data_parse.calendar import WechatUser
  14. # 配置日志
  15. logging.basicConfig(
  16. level=logging.INFO,
  17. format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
  18. )
  19. logger = logging.getLogger(__name__)
  20. def create_wechat_user_table():
  21. """
  22. 在Flask应用上下文中创建微信用户表
  23. Returns:
  24. bool: 创建成功返回True,否则返回False
  25. """
  26. try:
  27. # 创建Flask应用
  28. app = create_app()
  29. with app.app_context():
  30. logger.info("开始创建微信用户表...")
  31. # 创建表结构
  32. db.create_all()
  33. # 检查表是否创建成功
  34. inspector = db.inspect(db.engine)
  35. tables = inspector.get_table_names(schema='public')
  36. if 'wechat_users' in tables:
  37. logger.info("微信用户表创建成功")
  38. # 显示表结构信息
  39. columns = inspector.get_columns('wechat_users', schema='public')
  40. logger.info("表结构信息:")
  41. for column in columns:
  42. logger.info(f" - {column['name']}: {column['type']}")
  43. return True
  44. else:
  45. logger.error("微信用户表创建失败")
  46. return False
  47. except Exception as e:
  48. logger.error(f"创建微信用户表时发生错误: {str(e)}")
  49. return False
  50. def check_wechat_user_table():
  51. """
  52. 检查微信用户表是否存在
  53. Returns:
  54. bool: 表存在返回True,否则返回False
  55. """
  56. try:
  57. # 创建Flask应用
  58. app = create_app()
  59. with app.app_context():
  60. inspector = db.inspect(db.engine)
  61. tables = inspector.get_table_names(schema='public')
  62. if 'wechat_users' in tables:
  63. logger.info("微信用户表已存在")
  64. return True
  65. else:
  66. logger.info("微信用户表不存在")
  67. return False
  68. except Exception as e:
  69. logger.error(f"检查微信用户表时发生错误: {str(e)}")
  70. return False
  71. def drop_wechat_user_table():
  72. """
  73. 删除微信用户表
  74. Returns:
  75. bool: 删除成功返回True,否则返回False
  76. """
  77. try:
  78. # 创建Flask应用
  79. app = create_app()
  80. with app.app_context():
  81. logger.info("开始删除微信用户表...")
  82. # 删除表
  83. with db.engine.connect() as connection:
  84. connection.execute(db.text("DROP TABLE IF EXISTS public.wechat_users CASCADE;"))
  85. connection.commit()
  86. logger.info("微信用户表删除成功")
  87. return True
  88. except Exception as e:
  89. logger.error(f"删除微信用户表时发生错误: {str(e)}")
  90. return False
  91. def main():
  92. """
  93. 主函数,根据命令行参数执行相应操作
  94. """
  95. import argparse
  96. parser = argparse.ArgumentParser(description='微信用户表管理脚本')
  97. parser.add_argument('--action', choices=['create', 'check', 'drop'], default='create',
  98. help='执行的操作:create(创建)、check(检查)或 drop(删除)')
  99. args = parser.parse_args()
  100. if args.action == 'create':
  101. logger.info("开始创建微信用户表...")
  102. success = create_wechat_user_table()
  103. elif args.action == 'check':
  104. logger.info("开始检查微信用户表...")
  105. success = check_wechat_user_table()
  106. elif args.action == 'drop':
  107. logger.info("开始删除微信用户表...")
  108. success = drop_wechat_user_table()
  109. else:
  110. logger.error("未知的操作类型")
  111. sys.exit(1)
  112. if success:
  113. logger.info("操作完成")
  114. sys.exit(0)
  115. else:
  116. logger.error("操作失败")
  117. sys.exit(1)
  118. if __name__ == "__main__":
  119. main()