#!/usr/bin/env python # -*- coding: utf-8 -*- """ 在Flask应用上下文中创建微信用户表 使用SQLAlchemy创建表结构 """ import os import sys import logging # 添加项目根目录到Python路径 sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../..'))) from app import create_app, db from app.core.data_parse.calendar import WechatUser # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) def create_wechat_user_table(): """ 在Flask应用上下文中创建微信用户表 Returns: bool: 创建成功返回True,否则返回False """ try: # 创建Flask应用 app = create_app() with app.app_context(): logger.info("开始创建微信用户表...") # 创建表结构 db.create_all() # 检查表是否创建成功 inspector = db.inspect(db.engine) tables = inspector.get_table_names(schema='public') if 'wechat_users' in tables: logger.info("微信用户表创建成功") # 显示表结构信息 columns = inspector.get_columns('wechat_users', schema='public') logger.info("表结构信息:") for column in columns: logger.info(f" - {column['name']}: {column['type']}") return True else: logger.error("微信用户表创建失败") return False except Exception as e: logger.error(f"创建微信用户表时发生错误: {str(e)}") return False def check_wechat_user_table(): """ 检查微信用户表是否存在 Returns: bool: 表存在返回True,否则返回False """ try: # 创建Flask应用 app = create_app() with app.app_context(): inspector = db.inspect(db.engine) tables = inspector.get_table_names(schema='public') if 'wechat_users' in tables: logger.info("微信用户表已存在") return True else: logger.info("微信用户表不存在") return False except Exception as e: logger.error(f"检查微信用户表时发生错误: {str(e)}") return False def drop_wechat_user_table(): """ 删除微信用户表 Returns: bool: 删除成功返回True,否则返回False """ try: # 创建Flask应用 app = create_app() with app.app_context(): logger.info("开始删除微信用户表...") # 删除表 with db.engine.connect() as connection: connection.execute(db.text("DROP TABLE IF EXISTS public.wechat_users CASCADE;")) connection.commit() logger.info("微信用户表删除成功") return True except Exception as e: logger.error(f"删除微信用户表时发生错误: {str(e)}") return False def main(): """ 主函数,根据命令行参数执行相应操作 """ import argparse parser = argparse.ArgumentParser(description='微信用户表管理脚本') parser.add_argument('--action', choices=['create', 'check', 'drop'], default='create', help='执行的操作:create(创建)、check(检查)或 drop(删除)') args = parser.parse_args() if args.action == 'create': logger.info("开始创建微信用户表...") success = create_wechat_user_table() elif args.action == 'check': logger.info("开始检查微信用户表...") success = check_wechat_user_table() elif args.action == 'drop': logger.info("开始删除微信用户表...") success = drop_wechat_user_table() else: logger.error("未知的操作类型") sys.exit(1) if success: logger.info("操作完成") sys.exit(0) else: logger.error("操作失败") sys.exit(1) if __name__ == "__main__": main()