当前位置:首页>Excel>从Oracle数据库按机构拆分导出Excel文件:完整实现与详解

从Oracle数据库按机构拆分导出Excel文件:完整实现与详解

  • 2026-03-29 17:26:04
从Oracle数据库按机构拆分导出Excel文件:完整实现与详解

一、概述

1.1 项目背景

假设你是数据管理员,需要从Oracle数据库中提取2025年全省上千家机构的数据,并按以下要求处理:

  • 每个机构生成单独的Excel文件

  • 每个文件包含「问题汇总」和「原始明细」两个工作表

  • 所有文件按所属市州分类存放

1.2 技术栈

  • Python 3.x

  • cx_Oracle:Oracle数据库连接

  • pandas:数据处理与分析

  • openpyxl:Excel文件操作

  • pathlib:路径管理

二、环境准备

2.1 安装依赖包

 安装Python包
pip install cx_Oracle pandas openpyxl# Oracle Instant Client(需单独下载)# 访问Oracle官网下载对应版本的Instant Client# 将dll文件所在目录添加到系统PATH环境变量

2.2 目录结构

project/├── export_data.py      # 主程序├── config.py          # 配置文件(可选)├── requirements.txt   # 依赖列表├── logs/             # 日志目录└── output/           # 输出目录(自动创建)

三、完整代码实现

从Oracle数据库导出机构自查自纠数据功能:按机构拆分数据,生成多工作表Excel文件,按市州分类存储作者:您的名字日期:2026-02-12"""import osimport cx_Oracleimport pandas as pdfrom pathlib import Pathfrom datetime import datetime# ==================== 配置部分 ====================DB_CONFIG = {    'host': '192.168.1.100',      # 数据库服务器IP地址    'port': 1521,                 # Oracle默认端口    'service_name': 'ORCL',       # 数据库服务名    'user': 'med_inspect',        # 用户名    'password': 'your_password_123'  # 密码}OUTPUT_ROOT = './output'          # 输出根目录TABLE_NAME = '全量明细数据'  # 源数据表名# ==================== 数据库连接 ====================def get_connection():    """    建立Oracle数据库连接    Returns:        connection: Oracle数据库连接对象    """    try:        # 构造数据源名称        dsn = cx_Oracle.makedsn(            host=DB_CONFIG['host'],            port=DB_CONFIG['port'],            service_name=DB_CONFIG['service_name']        )        # 创建连接        conn = cx_Oracle.connect(            user=DB_CONFIG['user'],            password=DB_CONFIG['password'],            dsn=dsn        )        return conn    except cx_Oracle.DatabaseError as e:        print(f"❌ 数据库连接失败: {e}")        raise# ==================== 数据获取函数 ====================def get_all_institutions():    """    获取所有机构的基本信息(市州、编号、名称)    Returns:        DataFrame: 包含机构信息的表格    """    sql = f'''    SELECT DISTINCT        "机构归属_市州" AS city,        "机构编号" AS ins_code,        "机构名称" AS ins_name    FROM "{TABLE_NAME}"    WHERE "机构编号" IS NOT NULL        AND "机构归属_市州" IS NOT NULL    ORDER BY "机构归属_市州", "机构编号"    '''    try:        with get_connection() as conn:            # 执行查询并转换为DataFrame            df = pd.read_sql(sql, conn)            # 统一列名为小写,方便后续使用            df.columns = [col.lower() for col in df.columns]        return df    except Exception as e:        print(f"❌ 获取机构列表失败: {e}")        raisedef fetch_detail(ins_code):    """    获取指定机构的原始明细数据    Args:        ins_code: 机构编号    Returns:        DataFrame: 该机构的所有明细记录    """    sql = f'SELECT * FROM "{TABLE_NAME}" WHERE "机构编号" = :ins_code'    with get_connection() as conn:        df = pd.read_sql(sql, conn, params={'ins_code': ins_code})    return dfdef fetch_summary(ins_code):    """    获取指定机构的问题汇总统计    Args:        ins_code: 机构编号    Returns:        DataFrame: 按问题类别分组汇总的数据    """    sql = f'''    SELECT        "问题类别",        "医保目录名称" AS "问题项目",        "问题描述",        "政策依据",        COUNT(DISTINCT "机构编号") AS "违规机构数",        COUNT(1) AS "违规数据条数",        SUM(CASE            WHEN "违规金额" IS NOT NULL             THEN TO_NUMBER("违规金额")            ELSE 0        END) AS "违规金额"    FROM "{TABLE_NAME}"    WHERE "机构编号" = :ins_code        AND "问题类别" IS NOT NULL    GROUP BY        "问题类别", "医保目录名称", "问题描述", "政策依据"    ORDER BY "违规金额" DESC    '''    with get_connection() as conn:        df = pd.read_sql(sql, conn, params={'ins_code': ins_code})    return df# ==================== 辅助函数 ====================def sanitize_filename(name):    """    清理文件名,移除不安全的字符    Args:        name: 原始文件名    Returns:        str: 安全的文件名    """    # 处理空值    if pd.isna(name) or not str(name).strip():        return "未知机构"    # 定义允许的字符集合    allowed_chars = (' ', '_', '-', '(', ')', '(', ')', '.', '·')    # 过滤字符    safe_chars = []    for char in str(name):        if char.isalnum() or char in allowed_chars:            safe_chars.append(char)    # 组合并清理    safe_name = ''.join(safe_chars)    safe_name = safe_name.strip().replace(" ", "_")    return safe_name if safe_name else "未知机构"def get_summary_template():    """    获取汇总表的空模板(当机构无问题时使用)    Returns:        DataFrame: 包含标准列名的空DataFrame    """    columns = [        "问题类别", "问题项目", "问题描述", "政策依据",        "违规机构数", "违规数据条数", "违规金额"    ]    return pd.DataFrame(columns=columns)# ==================== 主处理函数 ====================def export_institution_data(city, ins_code, ins_name, output_root):    """    导出单个机构的数据到Excel    Args:        city: 市州名称        ins_code: 机构编号        ins_name: 机构名称        output_root: 输出根目录    Returns:        bool: 是否成功        str: 输出文件路径(成功时)或错误信息(失败时)    """    try:        # 1. 创建市州目录        safe_city = sanitize_filename(city)        city_dir = output_root / safe_city        city_dir.mkdir(parents=True, exist_ok=True)        # 2. 构建文件名        safe_name = sanitize_filename(ins_name)        filename = f"{ins_code}_{safe_name}.xlsx"        filepath = city_dir / filename        # 3. 获取数据        print(f"  正在获取明细数据...", end='', flush=True)        detail_df = fetch_detail(ins_code)        print(f"✅ 获取到 {len(detail_df)} 条记录")        if detail_df.empty:            return False, f"机构 {ins_code} 无数据"        print(f"  正在生成汇总统计...", end='', flush=True)        summary_df = fetch_summary(ins_code)        if summary_df.empty:            summary_df = get_summary_template()            print(f"⚠️ 无问题数据")        else:            print(f"✅ 发现 {len(summary_df)} 类问题")        # 4. 写入Excel        with pd.ExcelWriter(filepath, engine='openpyxl') as writer:            # 写入汇总表            summary_df.to_excel(                writer,                 sheet_name='问题汇总',                 index=False            )            # 写入明细表            detail_df.to_excel(                writer,                 sheet_name='原始明细',                 index=False            )            # 获取工作簿和工作表对象            workbook = writer.book            worksheet_summary = workbook['问题汇总']            worksheet_detail = workbook['原始明细']            # 自动调整列宽(基础版)            for worksheet in [worksheet_summary, worksheet_detail]:                for column in worksheet.columns:                    max_length = 0                    column_letter = column[0].column_letter                    for cell in column:                        try:                            cell_length = len(str(cell.value))                        except:                            cell_length = 0                        if cell_length > max_length:                            max_length = cell_length                    adjusted_width = min(max_length + 2, 50)  # 最大宽度50                    worksheet.column_dimensions[column_letter].width = adjusted_width        return True, str(filepath.relative_to(output_root))    except Exception as e:        return False, f"处理失败: {str(e)}"def main():    """    主程序:遍历所有机构并导出数据    """    print("=" * 60)    print("🚀 开始导出机构自查自纠数据")    print(f"📅 执行时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")    print("=" * 60)    # 1. 获取机构列表    print("📋 正在获取机构列表...", end='', flush=True)    try:        inst_df = get_all_institutions()        print(f"✅ 成功获取 {len(inst_df)} 个机构")    except Exception as e:        print(f"❌ 失败: {e}")        return    if len(inst_df) == 0:        print("⚠️ 未找到任何机构数据,程序退出")        return    # 2. 准备输出目录    output_root = Path(OUTPUT_ROOT)    output_root.mkdir(exist_ok=True)    print(f"📁 输出目录: {output_root.absolute()}")    # 3. 统计变量    success_count = 0    fail_count = 0    no_data_count = 0    # 4. 遍历处理每个机构    print("\n" + "=" * 60)    print("开始处理各个机构...")    print("=" * 60)    for idx, row in inst_df.iterrows():        city = row['city']        ins_code = row['ins_code']        ins_name = row['ins_name']        # 进度显示        progress = f"[{idx + 1}/{len(inst_df)}]"        print(f"\n{progress} 处理: {city} - {ins_name} ({ins_code})")        # 跳过无效数据        if pd.isna(city) or pd.isna(ins_code):            print(f"  ⚠️ 跳过:市州或机构编号为空")            fail_count += 1            continue        # 导出数据        success, result = export_institution_data(            city, ins_code, ins_name, output_root        )        # 统计结果        if success:            print(f"  ✅ 已保存: {result}")            success_count += 1        else:            if "无数据" in result:                print(f"  ⚠️ 跳过: {result}")                no_data_count += 1            else:                print(f"  ❌ 失败: {result}")                fail_count += 1    # 5. 输出汇总报告    print("\n" + "=" * 60)    print("🎉 数据导出完成!")    print("=" * 60)    print(f"📊 处理结果统计:")    print(f"  成功导出: {success_count} 个机构")    print(f"  无数据: {no_data_count} 个机构")    print(f"  处理失败: {fail_count} 个机构")    print(f"  总计: {len(inst_df)} 个机构")    if success_count > 0:        print(f"\n📁 文件保存位置: {output_root.absolute()}")        print("   文件结构:")        for city_dir in output_root.iterdir():            if city_dir.is_dir():                excel_files = list(city_dir.glob("*.xlsx"))                print(f"   ├─ {city_dir.name}/ ({len(excel_files)}个文件)")    print(f"\n⏰ 完成时间: {datetime.now().strftime('%H:%M:%S')}")# ==================== 程序入口 ====================if __name__ == "__main__":    # 记录开始时间    start_time = datetime.now()    try:        main()    except KeyboardInterrupt:        print("\n\n⏹️ 用户中断程序执行")    except Exception as e:        print(f"\n💥 程序执行出错: {e}")        import traceback        traceback.print_exc()    finally:        # 计算运行时间        end_time = datetime.now()        run_time = end_time - start_time        print(f"\n⏱️ 总运行时间: {run_time}")

四、关键知识点详解

4.1 数据库连接管理

使用上下文管理器自动管理连接
withget_connection() as conn:    df = pd.read_sql(query, conn)
 退出with块时自动关闭连接,避免资源泄露

4.2 SQL参数化查询

# 安全的方式:使用参数化查询防止SQL注入query = 'SELECT * FROM table WHERE id = :ins_code'df = pd.read_sql(query, conn, params={'ins_code': ins_code})# 危险的方式:字符串拼接(不要使用!)query = f'SELECT * FROM table WHERE id = {ins_code}'  # ❌

4.3 数据处理技巧

 1. 处理空值
if pd.isna(value):  # 判断是否为NaN    return "未知"


# 2. 列名处理
df.columns = [col.lower() for col in df.columns]  # 统一小写
 3. 空DataFrame判断
if df.empty:  # 判断是否为空    return pd.DataFrame(columns=columns)  # 返回空模板

4.4 文件路径管理

from pathlib import Path# 创建Path对象output_root = Path('./output')# 创建目录(自动创建父目录)city_dir = output_root / "成都市"city_dir.mkdir(parents=True, exist_ok=True)  # 目录存在时不报错# 构建文件路径filepath = city_dir / f"{ins_code}_医院.xlsx"# 获取相对路径relative_path = filepath.relative_to(output_root)

4.5 Excel写入优化

with pd.ExcelWriter(filepath, engine='openpyxl'as writer:    # 写入多个工作表    summary_df.to_excel(writer, sheet_name='汇总', index=False)    detail_df.to_excel(writer, sheet_name='明细', index=False)    # 获取工作簿进行高级设置    workbook = writer.book    worksheet = workbook['汇总']    # 自动调整列宽    for column in worksheet.columns:        max_length = 0        column_letter = column[0].column_letter        for cell in column:            cell_length = len(str(cell.value))            max_length = max(max_length, cell_length)        adjusted_width = min(max_length + 250)        worksheet.column_dimensions[column_letter].width = adjusted_width

五、错误处理与日志

5.1 增强版错误处理

import loggingfrom datetime import datetime# 配置日志def setup_logging():    log_dir = Path('./logs')    log_dir.mkdir(exist_ok=True)    log_file = log_dir / f"export_{datetime.now().strftime('%Y%m%d')}.log"    logging.basicConfig(        level=logging.INFO,        format='%(asctime)s - %(levelname)s - %(message)s',        handlers=[            logging.FileHandler(log_file, encoding='utf-8'),            logging.StreamHandler()  # 同时输出到控制台        ]    )    return logging.getLogger(__name__)# 使用日志logger = setup_logging()logger.info(f"开始处理机构 {ins_code}")try:    # 业务代码    passexcept Exception as e:    logger.error(f"处理机构 {ins_code} 失败: {e}")

六、配置优化建议

6.1 配置文件分离

创建config.py# config.pyimport osfrom pathlib import Pathclass Config:    # 数据库配置    DB_HOST = os.getenv('DB_HOST''192.168.1.100')    DB_PORT = int(os.getenv('DB_PORT'1521))    DB_SERVICE = os.getenv('DB_SERVICE''ORCL')    DB_USER = os.getenv('DB_USER''med_inspect')    DB_PASSWORD = os.getenv('DB_PASSWORD''')    # 输出配置    OUTPUT_DIR = Path(os.getenv('OUTPUT_DIR''./output'))    # 数据表    TABLE_NAME = '自查自纠2025年全量明细数据'    # 处理控制    BATCH_SIZE = 100  # 批量处理数量    MAX_RETRIES = 3   # 重试次数

6.2 命令行参数支持

import argparsedef parse_args():    parser = argparse.ArgumentParser(description='导出机构自查自纠数据')    parser.add_argument('--output''-o'default='./output',                       help='输出目录路径')    parser.add_argument('--city''-c'                       help='指定市州,不指定则处理所有')    parser.add_argument('--test''-t', action='store_true',                       help='测试模式,只处理前5个机构')    return parser.parse_args()# 在主程序中使用args = parse_args()if args.test:    inst_df = inst_df.head(5)  # 测试模式下只处理前5个

七、运行与测试

7.1 运行程序

# 基本运行python export_data.py# 带参数运行python export_data.py --output ./2025年自查数据 --test# 指定市州python export_data.py --city "成都市"

7.2 预期输出结构

output/├── 成都市/│   ├── 110101_成都市第一人民医院.xlsx│   ├── 110102_华西医院.xlsx│   └── ...├── 绵阳市/│   ├── 120101_绵阳市中心医院.xlsx│   └── ...└── 泸州市/    └── ...

7.3 生成的Excel文件结构

每个Excel文件包含两个工作表:

  1. 问题汇总:按问题类别统计

    • 问题类别、问题项目、问题描述、政策依据

    • 违规机构数、违规数据条数、违规金额

    • 按违规金额降序排列

  2. 原始明细:所有原始记录

    • 包含源表的所有字段

    • 按原始顺序排列

八、常见问题与解决方案

8.1 数据库连接问题

问题cx_Oracle.DatabaseError: DPI-1047

解决:确保已安装Oracle Instant Client并正确配置PATH

8.2 内存不足

问题:处理大数据时内存溢出

解决

# 分批处理batch_size = 100for i in range(0, len(inst_df), batch_size):    batch = inst_df.iloc[i:i+batch_size]    process_batch(batch)

8.3 文件名乱码

问题:中文字符在文件名中显示异常

解决:使用sanitize_filename函数清理特殊字符

8.4 权限问题

问题:无法创建目录或写入文件

解决:检查输出目录的写入权限,或更换有权限的目录

九、扩展功能建议

9.1 添加邮件通知

import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartdef send_email_report(success_count, total_count, output_dir):    """发送执行结果邮件"""    # 邮件配置    msg = MIMEMultipart()    msg['Subject'] = f'数据导出完成报告 - {datetime.now().date()}'    # 构建邮件内容    content = f"""    数据导出任务已完成!    统计结果:    - 成功导出:{success_count} 个机构    - 失败:{total_count - success_count} 个机构    - 总计:{total_count} 个机构    文件位置:{output_dir}    生成时间:{datetime.now()}    """    msg.attach(MIMEText(content, 'plain'))    # 发送邮件...

9.2 添加进度条

from tqdm import tqdm# 在循环处理时显示进度条for idx, row in tqdm(inst_df.iterrows(), total=len(inst_df)):    # 处理每个机构    pass

9.3 配置文件支持

import yamlimport json# 支持YAML或JSON配置文件def load_config(config_file):    if config_file.endswith('.yaml'or config_file.endswith('.yml'):        with open(config_file, 'r', encoding='utf-8'as f:            return yaml.safe_load(f)    elif config_file.endswith('.json'):        with open(config_file, 'r', encoding='utf-8'as f:            return json.load(f)

十、总结

这个项目展示了如何:

  1. 安全连接数据库:使用参数化查询,防止SQL注入

  2. 高效处理数据:利用pandas进行数据操作

  3. 灵活文件管理:按市州分类存储,文件名自动清理

  4. 健壮错误处理:单个机构失败不影响整体流程

  5. 用户体验优化:进度提示,清晰日志

通过这个项目,您不仅学会了具体的代码实现,更重要的是掌握了处理实际数据导出任务的完整思路和方法论。这种模式可以广泛应用于各种数据导出、报表生成、数据分发等场景。


适用场景扩展

  • 医疗机构考核数据分发

  • 学校成绩单按班级分类

  • 企业工资条按部门发放

  • 客户账单按地区分类

  • 任何需要"一对多"数据分发的场景

希望这份完整的实现方案和详细解释能帮助您更好地理解和应用Python进行数据处理工作!

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-06 13:24:33 HTTP/2.0 GET : https://h.sjds.net/a/472911.html
  2. 运行时间 : 0.124459s [ 吞吐率:8.03req/s ] 内存消耗:4,464.66kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=afa825d14c9e5085857c17667deb1eb5
  1. /yingpanguazai/ssd/ssd1/www/h.sjds.net/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/h.sjds.net/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/h.sjds.net/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/h.sjds.net/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/h.sjds.net/runtime/temp/ad153693ed39fba6d1bda2fe72512cde.php ( 12.06 KB )
  140. /yingpanguazai/ssd/ssd1/www/h.sjds.net/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000552s ] mysql:host=127.0.0.1;port=3306;dbname=h_sjds;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000697s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000301s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000297s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000559s ]
  6. SELECT * FROM `set` [ RunTime:0.000249s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000591s ]
  8. SELECT * FROM `article` WHERE `id` = 472911 LIMIT 1 [ RunTime:0.012107s ]
  9. UPDATE `article` SET `lasttime` = 1775453074 WHERE `id` = 472911 [ RunTime:0.000735s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.001743s ]
  11. SELECT * FROM `article` WHERE `id` < 472911 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001239s ]
  12. SELECT * FROM `article` WHERE `id` > 472911 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002329s ]
  13. SELECT * FROM `article` WHERE `id` < 472911 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001626s ]
  14. SELECT * FROM `article` WHERE `id` < 472911 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.020981s ]
  15. SELECT * FROM `article` WHERE `id` < 472911 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.013688s ]
0.126100s