当前位置:首页>python>Python SQLAlchemy 操作 MySQL:从入门到生产级实践

Python SQLAlchemy 操作 MySQL:从入门到生产级实践

  • 2026-06-22 17:21:39
Python SQLAlchemy 操作 MySQL:从入门到生产级实践

🤔 你是否也踩过这些坑?

在 Python 项目里直接用 pymysql 拼 SQL 字符串,上线一周后发现 SQL 注入漏洞;连接池没配好,高并发时数据库连接耗尽,服务直接挂掉;换个数据库版本,一堆 SQL 语法要重写……

这些问题,在用上 SQLAlchemy 之后,基本都能系统性地解决。

SQLAlchemy 是 Python 生态里最成熟的 ORM 框架,GitHub Star 超过 9k,被 Flask、FastAPI 等主流框架广泛采用。它不只是"把 SQL 换成 Python 写法"这么简单——连接池管理、事务控制、模型映射、迁移支持,一套全包。

读完本文,你将掌握:

  • • SQLAlchemy 2.x 连接 MySQL 的正确姿势
  • • ORM 模型定义与 CRUD 完整实践
  • • 连接池调优与事务控制的生产级配置
  • • 3 个真实项目场景的落地代码

🔍 问题深度剖析:原生 SQL 的隐患

很多项目早期图省事,直接用 pymysql 裸写 SQL。这条路走到中后期,问题会一个接一个冒出来。

第一个雷:SQL 注入风险。 字符串拼接 SQL 是新手最常见的写法,一旦用户输入没做转义,攻击者一条 ' OR 1=1 -- 就能拖走整个数据库。

第二个雷:连接管理混乱。 每次请求都 connect() 再 close(),高并发时数据库连接数瞬间打满。或者反过来,连接从不关闭,内存泄漏悄悄积累。

第三个雷:代码可维护性差。 表结构散落在各处 SQL 字符串里,改一个字段名要全局搜索替换,遗漏一处就是线上 Bug。

第四个雷:跨数据库迁移成本高。 项目初期用 SQLite 开发,上线换 MySQL,SQL 方言差异让人头疼。

SQLAlchemy 用统一的抽象层解决了上述所有问题。它的核心架构分两层:底层的 Core(表达式语言,接近 SQL)和上层的 ORM(对象关系映射)。两层可以混用,灵活度极高。


💡 核心要点提炼

在动手写代码之前,有几个概念必须先搞清楚,否则后面会一头雾水。

Engine(引擎) 是一切的起点,它管理数据库连接池,是整个 SQLAlchemy 与数据库通信的入口。一个应用只需要一个 Engine 实例。

Session(会话) 是 ORM 操作的工作单元。所有的增删改查都通过 Session 进行,它负责追踪对象状态变化,并在提交时生成对应的 SQL。

Model(模型) 是数据库表的 Python 映射。一个类对应一张表,类属性对应字段。

连接池 是 SQLAlchemy 默认开启的机制,QueuePool 是默认实现,避免了频繁建立/断开数据库连接的开销。

SQLAlchemy 2.x 相比 1.x 有较大变化,推荐直接上 2.x,Session 的使用方式更清晰,类型提示支持也更好。


🚀 方案一:基础配置与模型定义

环境准备

bash1pip install sqlalchemy pymysql cryptography

测试环境: Windows 11 + Python 3.11 + MySQL 8.0 + SQLAlchemy 2.0.x

创建 Engine 与 Base

python1from sqlalchemy import create_engine2from sqlalchemy.orm import DeclarativeBase, sessionmaker34# 数据库连接串格式:5# mysql+pymysql://用户名:密码@主机:端口/数据库名?charset=utf8mb46DATABASE_URL = "mysql+pymysql://root:123456@localhost:3306/testdb?charset=utf8mb4"78# echo=True 会打印所有生成的 SQL,开发阶段很有用,生产环境记得关掉9engine = create_engine(10DATABASE_URL,11    echo=False,12    pool_size=10,        # 连接池保持的连接数13    max_overflow=20,     # 超出 pool_size 后最多额外创建的连接数14    pool_timeout=30,     # 等待连接的超时时间(秒)15    pool_recycle=1800,   # 连接复用超过 1800 秒后自动重建,防止 MySQL 的 8 小时断连16)1718# Session 工厂,每次需要数据库操作时从这里创建 SessionSessionLocal = sessionmaker(bind=engine, autocommit=False, autoflush=False)1920# 所有 ORM 模型的基类21class Base(DeclarativeBase):22pass

pool_recycle=1800 这个参数非常重要。 MySQL 默认 8 小时空闲连接自动断开,如果连接池里的连接超过这个时间没用过,下次拿来用就会报 Lost connection to MySQL server。设置 pool_recycle 让 SQLAlchemy 主动刷新老连接,彻底规避这个问题。

定义 ORM 模型

python1from datetime import datetime2from sqlalchemy import StringIntegerDateTimeBooleanText, func3from sqlalchemy.orm import Mapped, mapped_column4from engine import Base56class User(Base):7    __tablename__ = "users"89# Mapped[int] 是 SQLAlchemy 2.x 推荐的类型注解写法10    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)11    username: Mapped[str] = mapped_column(String(50), unique=True, nullable=False, index=True)12    email: Mapped[str] = mapped_column(String(100), unique=True, nullable=False)13    password_hash: Mapped[str] = mapped_column(String(255), nullable=False)14    is_active: Mapped[bool] = mapped_column(Boolean, default=True)15    bio: Mapped[str | None] = mapped_column(Text, nullable=True)1617# server_default 让数据库层面设置默认值,更可靠18    created_at: Mapped[datetime] = mapped_column(19DateTime, server_default=func.now()20    )21    updated_at: Mapped[datetime] = mapped_column(22DateTime, server_default=func.now(), onupdate=func.now()23    )2425def __repr__(self) -> str:26return f"<User(id={self.id}, username='{self.username}')>"

建表

python1# 初始化数据库(建表)2from engine import engine, Base3from user import User  # 确保模型被导入,Base 才能感知到45Base.metadata.create_all(bind=engine)6print("数据库表创建成功")

🛠️ 方案二:完整 CRUD 实践

有了模型,来看增删改查的标准写法。推荐用上下文管理器管理 Session 生命周期,确保异常时自动回滚。

python1from contextlib import contextmanager2from sqlalchemy.orm import Session3from sqlalchemy import select, update, delete4from db.engine import SessionLocal5from models.user import User67@contextmanager8def get_db():9"""Session 上下文管理器,自动处理提交与回滚"""10    db: Session = SessionLocal()11try:12yield db13        db.commit()14except Exception:15        db.rollback()16raise17finally:18        db.close()192021# ✅ 新增用户22def create_user(username: str, email: str, password_hash: str) -> User:23with get_db() as db:24        user = User(username=username, email=email, password_hash=password_hash)25        db.add(user)26        db.flush()   # flush 后可以获取数据库生成的 id,但还未提交27        db.refresh(user)  # 刷新对象,获取数据库填充的字段(如 created_at)28return user293031# ✅ 查询单个用户32def get_user_by_id(user_id: int) -> User | None:33with get_db() as db:34# SQLAlchemy 2.x 推荐用 select() 语句35        stmt = select(User).where(User.id == user_id)36        result = db.execute(stmt)37return result.scalar_one_or_none()383940# ✅ 条件查询 + 分页41def get_active_users(page: int = 1, page_size: int = 20) -> list[User]:42with get_db() as db:43        stmt = (44select(User)45            .where(User.is_active == True)46            .order_by(User.created_at.desc())47            .offset((page - 1) * page_size)48            .limit(page_size)49        )50return db.execute(stmt).scalars().all()515253# ✅ 更新用户信息54def update_user_bio(user_id: int, bio: str) -> bool:55with get_db() as db:56        stmt = (57update(User)58            .where(User.id == user_id)59            .values(bio=bio)60            .execution_options(synchronize_session="fetch")61        )62        result = db.execute(stmt)63return result.rowcount > 0646566# ✅ 软删除(推荐)vs 硬删除67def deactivate_user(user_id: int) -> bool:68"""软删除:将 is_active 置为 False,保留数据"""69with get_db() as db:70        stmt = update(User).where(User.id == user_id).values(is_active=False)71        result = db.execute(stmt)72return result.rowcount > 0737475def hard_delete_user(user_id: int) -> bool:76"""硬删除:慎用,数据不可恢复"""77with get_db() as db:78        stmt = delete(User).where(User.id == user_id)79        result = db.execute(stmt)80return result.rowcount > 0

踩坑预警:db.flush() 和 db.commit() 是两个不同的操作。flush 把变更同步到数据库但不提交事务(其他 Session 看不到),commit 才是真正提交。如果只 flush 不 commit,程序崩溃后数据会回滚。上面的上下文管理器在 yield 后自动 commit,正常退出时数据才真正落库。


⚡ 方案三:关联关系与批量操作优化

一对多关系(用户与文章)

python1from sqlalchemy import StringIntegerForeignKeyText2from sqlalchemy.orm import Mapped, mapped_column, relationship3from engine import Base4from user import User56class Post(Base):7    __tablename__ = "posts"89    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)10    title: Mapped[str] = mapped_column(String(200), nullable=False)11    content: Mapped[str] = mapped_column(Text, nullable=False)1213# 外键关联到 users 表14    author_id: Mapped[int] = mapped_column(IntegerForeignKey("users.id"), nullable=False)1516# 关系定义,lazy="select" 是默认值(按需加载)17# lazy="joined" 会用 JOIN 一次性加载,适合总是需要关联数据的场景18    author: Mapped["User"] = relationship("User", back_populates="posts", lazy="select")

批量插入性能对比

逐条 add() vs bulk_insert_mappings vs insert() 批量插入,性能差异显著。

python1import time2from sqlalchemy import insert34def benchmark_insert(count: int = 1000):5"""对比三种插入方式的性能"""67# 方式一:逐条 add(最慢,但支持完整 ORM 特性)8    start = time.time()9with get_db() as db:10for i in range(count):11            user = User(12                username=f"user_orm_{i}",13                email=f"orm_{i}@test.com",14                password_hash="hashed"15            )16            db.add(user)17    t1 = time.time() - start1819# 方式二:bulk_insert_mappings(较快,跳过部分 ORM 开销)20    start = time.time()21with get_db() as db:22        data = [23            {"username"f"user_bulk_{i}""email"f"bulk_{i}@test.com""password_hash""hashed"}24for i in range(count)25        ]26        db.bulk_insert_mappings(User, data)27    t2 = time.time() - start2829# 方式三:Core 层 insert(最快,完全绕过 ORM)30    start = time.time()31with get_db() as db:32        data = [33            {"username"f"user_core_{i}""email"f"core_{i}@test.com""password_hash""hashed"}34for i in range(count)35        ]36        db.execute(insert(User), data)37    t3 = time.time() - start3839print(f"插入 {count} 条数据耗时对比(测试环境:Windows 11 / MySQL 8.0 本地):")40print(f"  逐条 ORM add:          {t1:.3f}s")41print(f"  bulk_insert_mappings:  {t2:.3f}s  (约快 {t1/t2:.1f}x)")42print(f"  Core insert 批量:      {t3:.3f}s  (约快 {t1/t3:.1f}x)")

实测参考数据(1000条,本地 MySQL): 逐条 ORM ≈ 0.31s,bulk_insert ≈ 0.034s,Core 批量 ≈ 0.037s。数据量越大,差距越明显。 生产环境批量写入场景优先选 Core 层 insert()。在1000条数据是bulk_insert好像还是没什么问题,但到10000条时,你会发现还是Core的快,其实想法这也自然的。


🧩 生产级配置补充

完整的连接池配置参考

python1# 适合中等规模 Web 服务的连接池配置2engine = create_engine(3DATABASE_URL,4    echo=False,5    pool_size=10,6    max_overflow=20,7    pool_timeout=30,8    pool_recycle=1800,9    pool_pre_ping=True,   # 每次从池中取连接前先 ping 一下,自动剔除失效连接10    connect_args={11"connect_timeout"10,  # 建立连接的超时时间12"charset""utf8mb4",13    }14)

pool_pre_ping=True 是另一个强烈推荐开启的参数。它会在每次从连接池取连接时先发一个轻量的 SELECT 1 探测,如果连接已经断开就自动重建,彻底告别 MySQL server has gone away 报错。

与 FastAPI 集成的标准写法

python1# 在 FastAPI 中,推荐用依赖注入管理 Session2from fastapi import Depends3from sqlalchemy.orm import Session4from db.engine import SessionLocal56def get_db_session():7    db = SessionLocal()8try:9yield db10finally:11        db.close()1213# 在路由中使用14from fastapi import APIRouter15router = APIRouter()1617@router.get("/users/{user_id}")18def read_user(user_id: int, db: Session = Depends(get_db_session)):19    stmt = select(User).where(User.id == user_id)20    user = db.execute(stmt).scalar_one_or_none()21if not user:22raise HTTPException(status_code=404, detail="用户不存在")23return user

📌 三句话总结

SQLAlchemy 不是在用 Python 写 SQL,而是在用 Python 描述数据结构与业务逻辑。

连接池配置是生产环境稳定性的基础,pool_recycle 和 pool_pre_ping 两个参数必须重视。

批量操作场景下,Core 层的性能是逐条 ORM 的 10 倍以上,选对工具比优化代码更重要。


🎯 结尾总结

本文从原生 SQL 的四大痛点出发,系统介绍了 SQLAlchemy 2.x 连接 MySQL 的完整实践路径:

  • • 基础配置:Engine 创建、连接池参数、ORM 模型定义
  • • CRUD 实践:上下文管理器管理 Session、安全的增删改查写法
  • • 进阶优化:关联关系映射、批量插入性能对比、生产级连接池配置

学习路径建议: SQLAlchemy 基础 → Alembic 数据库迁移 → 异步 SQLAlchemy(asyncpg 驱动)→ 分库分表方案设计。每一步都有大量实际项目可以练手,不用急着一次学完。


💬 欢迎在评论区聊聊你的实践经验: 你在项目中遇到过哪些数据库连接相关的线上问题?是连接池耗尽、慢查询,还是事务死锁?


#Python#SQLAlchemy#MySQL#数据库#Python开发#性能优化#ORM

最新文章

随机文章

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