当前位置:首页>python>MongoDB Python ORM对决:告别PyMongo裸奔,这5个神器让你开发效率翻倍!

MongoDB Python ORM对决:告别PyMongo裸奔,这5个神器让你开发效率翻倍!

  • 2026-01-29 18:04:41
MongoDB Python ORM对决:告别PyMongo裸奔,这5个神器让你开发效率翻倍!

点击蓝字 关注我们

还在用PyMongo写冗长的字典操作?是时候升级你的MongoDB开发体验了!

开篇:为什么需要MongoDB ORM?

先看一段典型的“PyMongo原始人”代码:

# 传统PyMongo写法 - 字典地狱
defcreate_user(data):
    result = db.users.insert_one({
'name': data['name'],
'email': data['email'],
'age': data.get('age'0),
'created_at': datetime.now()
    })
return str(result.inserted_id)

deffind_users_by_age(min_age):
    users = db.users.find({'age': {'$gte': min_age}})
return [{
'id': str(user['_id']),
'name': user['name'],
        **user
    } for user in users]

发现问题了吗?

  • 字段名硬编码,改了数据库字段就得全局搜索替换
  • 类型转换繁琐,ObjectId转字符串没完没了
  • 缺少数据验证,脏数据直接进数据库
  • 代码重复严重,每个集合都要写一套CRUD

是时候请出我们的MongoDB ORM天团了!

一、MongoEngine:企业级首选,功能最全

特点:大而全的瑞士军刀

# 安装
pip install mongoengine

# 定义数据模型
from mongoengine import Document, StringField, IntField, DateTimeField, ListField

classUser(Document):
    name = StringField(required=True, max_length=50)
    email = StringField(required=True, unique=True)
    age = IntField(min_value=0, max_value=150, default=0)
    tags = ListField(StringField())
    created_at = DateTimeField(default=datetime.now)

    meta = {
'collection''users',
'indexes': [
'email',
            {'fields': ['created_at'], 'expireAfterSeconds'3600}  # TTL索引
        ],
'ordering': ['-created_at']
    }

# 自定义方法
defis_adult(self):
return self.age >= 18

defadd_tag(self, tag):
if tag notin self.tags:
            self.tags.append(tag)
            self.save()

# 使用体验
user = User(name='张三', email='zhangsan@example.com', age=25)
user.save()  # 自动验证数据

# 强大的查询API
vip_users = User.objects(tags='vip', age__gte=18)
recent_users = User.objects(created_at__gte=timezone.now() - timedelta(days=7))

# 聚合查询
from mongoengine.queryset.visitor import Q
admins = User.objects(Q(tags='admin') | Q(email__endswith='@company.com'))

适用场景

  • 企业级应用
  • 需要完整ORM功能
  • 复杂业务逻辑

二、Motor + PyMongo组合:异步高性能王者

特点:速度与激情的完美结合

# 安装
pip install motor pydantic  # 配合Pydantic做数据验证

# 异步数据模型
from motor.motor_asyncio import AsyncIOMotorClient
from pydantic import BaseModel, Field, validator
from typing import Optional, List
from datetime import datetime

classUserCreate(BaseModel):
    name: str = Field(..., min_length=2, max_length=50)
    email: str = Field(..., regex=r'^[\w\.-]+@[\w\.-]+\.\w+$')
    age: Optional[int] = Field(None, ge=0, le=150)
    tags: List[str] = []

    @validator('name')
defname_must_contain_space(cls, v):
if' 'notin v:
raise ValueError('姓名必须包含空格')
return v

classUserInDB(UserCreate):
    id: str = Field(alias='_id')
    created_at: datetime = Field(default_factory=datetime.now)
    updated_at: datetime = Field(default_factory=datetime.now)

classUserRepository:
def__init__(self, db):
        self.collection = db.users

asyncdefcreate_user(self, user_data: UserCreate) -> UserInDB:
"""创建用户 - 异步高性能版本"""
        user_dict = user_data.dict()
        user_dict['created_at'] = user_dict['updated_at'] = datetime.now()

        result = await self.collection.insert_one(user_dict)

# 返回完整用户数据
        user_dict['_id'] = str(result.inserted_id)
return UserInDB(**user_dict)

asyncdeffind_users_with_aggregation(self):
"""复杂聚合查询 - 利用MongoDB原生能力"""
        pipeline = [
            {
'$match': {'age': {'$gte'18}}
            },
            {
'$lookup': {
'from''orders',
'localField''_id',
'foreignField''user_id',
'as''orders'
                }
            },
            {
'$addFields': {
'order_count': {'$size''$orders'},
'total_spent': {'$sum''$orders.amount'}
                }
            },
            {
'$sort': {'total_spent'-1}
            },
            {
'$limit'10
            }
        ]

asyncfor user in self.collection.aggregate(pipeline):
yield user

asyncdefbulk_update(self, filter_query, update_data):
"""批量更新 - 极致性能"""
        result = await self.collection.update_many(
            filter_query,
            {'$set': update_data}
        )
return result.modified_count

# 使用示例
asyncdefmain():
    client = AsyncIOMotorClient('mongodb://localhost:27017')
    db = client.myapp
    repo = UserRepository(db)

# 创建用户
    user = await repo.create_user(UserCreate(
        name='李 四',
        email='lisi@example.com',
        age=30
    ))

# 批量处理
asyncfor top_user in repo.find_users_with_aggregation():
        print(f"VIP用户: {top_user['name']}, 消费: {top_user['total_spent']}")

适用场景

  • 高并发API服务
  • 实时数据处理
  • 微服务架构

三、Beanie:Pythonic新选择,基于Pydantic

特点:现代、类型安全、开发体验好

# 安装
pip install beanie

from beanie import Document, Indexed, Link
from pydantic import Field
from typing import Optional, List
from datetime import datetime

classUser(Document):
    name: str = Field(..., min_length=2)
    email: str = Indexed(str, unique=True)  # 自动创建索引
    age: Optional[int] = Field(None, ge=0, le=150)
    tags: List[str] = []
    created_at: datetime = Field(default_factory=datetime.now)

# 关联查询(类似关系型数据库)
    department: Link["Department"]  # 类型提示

classSettings:
        name = "users"# 集合名
        use_state_management = True# 状态管理

asyncdefbefore_save(self):
"""保存前的钩子"""
        self.updated_at = datetime.now()

    @property
defdisplay_name(self):
returnf"{self.name} ({self.email})"

classDepartment(Document):
    name: str
    code: Indexed(str, unique=True)

classSettings:
        name = "departments"

# 初始化
await User.init_db()

# 查询语法非常Pythonic
users = await User.find(
    User.age >= 18,
    User.tags.contains("vip")
).sort(-User.created_at).limit(10).to_list()

# 原生聚合支持
pipeline = [
    {"$match": {"age": {"$gte"25}}},
    {"$group": {"_id""$department""count": {"$sum"1}}}
]
result = await User.aggregate(pipeline).to_list()

适用场景

  • 喜欢Pydantic的类型提示
  • 需要良好开发体验
  • 新项目启动

四、Umongo:轻量灵活,基于Marshmallow

特点:轻量级但功能不简单

# 安装
pip install umongo[pymongo]  # 或 umongo[motor]

from umongo import Instance, Document, fields
from pymongo import MongoClient
from datetime import datetime

# 创建实例
client = MongoClient()
db = client.myapp
instance = Instance(db)

@instance.register
classUser(Document):
    name = fields.StrField(required=True, validate=lambda v: len(v) >= 2)
    email = fields.EmailField(unique=True)
    age = fields.IntField(min_value=0, max_value=150)

# 复杂字段类型
    preferences = fields.DictField(default={
'theme''light',
'notifications'True
    })

    created_at = fields.DateTimeField(default=datetime.now)

classMeta:
        collection_name = "users"

    @property
defis_verified(self):
return'verified'in self.tags if hasattr(self, 'tags'elseFalse

    @staticmethod
asyncdeffind_by_domain(domain):
"""自定义查询方法"""
return User.find({'email': {'$regex'f'@{domain}$'}})

# 数据序列化/反序列化
user_data = {
'name''王五',
'email''wangwu@example.com',
'age'28
}

user = User(**user_data)  # 自动验证
user.dump()  # 序列化为字典

# 数据库操作
await user.commit()  # 保存
await user.delete()  # 删除

# 批量操作
users = await User.find({'age': {'$gte'25}}).to_list()

五、ODMantic:异步优先,类型安全

特点:为async/await而生

# 安装
pip install odmantic

from odmantic import Model, Field, ObjectId
from typing import Optional
import asyncio

classUser(Model):
    name: str = Field(min_length=2)
    email: str = Field(unique=True)
    age: Optional[int] = Field(ge=0, le=150, default=None)

classConfig:
        collection = "users"

    @property
defage_group(self):
if self.age < 18:
return"未成年"
elif self.age < 60:
return"成年"
else:
return"老年"

# 异步引擎
from odmantic import AIOEngine
from motor.motor_asyncio import AsyncIOMotorClient

asyncdefmain():
    client = AsyncIOMotorClient("mongodb://localhost:27017")
    engine = AIOEngine(client=client, database="myapp")

# CRUD操作
    user = User(name="赵六", email="zhaoliu@example.com", age=35)
await engine.save(user)

# 查询
    users = await engine.find(User, User.age >= 30)

# 复杂查询
    users = await engine.find(
        User,
        User.age > 25,
        sort_by=User.age,
        limit=10
    )

# 原生聚合
    pipeline = [
        {"$group": {"_id"None"avg_age": {"$avg""$age"}}}
    ]
    result = await engine.aggregate(User, pipeline)

📊 横向对比:哪个适合你?

特性对比
MongoEngine
Motor+PyMongo
Beanie
Umongo
ODMantic
学习曲线
中等
较低
较低
中等
中等
性能
良好
优秀
良好
良好
优秀
异步支持
有限
完美
支持
支持
完美
类型提示
部分
需配合Pydantic
完美
良好
完美
验证能力
强大
需自行实现
完美
强大
强大
社区生态
最丰富
官方驱动
增长中
良好
增长中
适用规模
大中项目
各种规模
中小项目
各种规模
中小项目

🚀 实战:电商用户系统完整示例

# 综合方案:Beanie + 缓存 + 事件驱动
from beanie import Document, before_event, Replace, Insert
from pydantic import EmailStr, Field
from datetime import datetime
import redis.asyncio as redis
from enum import Enum

classUserRole(str, Enum):
    CUSTOMER = "customer"
    ADMIN = "admin"
    VIP = "vip"

classUser(Document):
    username: str = Field(..., min_length=3)
    email: EmailStr = Field(unique=True)
    password_hash: str
    role: UserRole = UserRole.CUSTOMER
    points: int = Field(default=0, ge=0)
    last_login: datetime = None
    metadata: dict = Field(default_factory=dict)

classSettings:
        name = "users"
        use_cache = True
        cache_expiration_time = 300# 5分钟缓存

    @before_event(Insert, Replace)
defupdate_timestamps(self):
        self.updated_at = datetime.now()

asyncdefadd_points(self, points: int):
"""原子操作:增加积分"""
await self.set({User.points: self.points + points})

    @classmethod
asyncdeffind_top_spenders(cls, limit: int = 10):
"""查找消费最高的用户"""
        pipeline = [
            {"$lookup": {
"from""orders",
"localField""_id",
"foreignField""user_id",
"as""orders"
            }},
            {"$unwind""$orders"},
            {"$group": {
"_id""$_id",
"total_spent": {"$sum""$orders.amount"},
"name": {"$first""$username"},
"email": {"$first""$email"}
            }},
            {"$sort": {"total_spent"-1}},
            {"$limit": limit}
        ]
returnawait cls.aggregate(pipeline).to_list()

# 带缓存的Repository模式
classCachedUserRepository:
def__init__(self, redis_client):
        self.redis = redis_client
        self.cache_prefix = "user:"

asyncdefget_user_with_cache(self, user_id: str) -> Optional[User]:
# 先查缓存
        cache_key = f"{self.cache_prefix}{user_id}"
        cached = await self.redis.get(cache_key)

if cached:
return User.parse_raw(cached)

# 缓存未命中,查数据库
        user = await User.get(user_id)
if user:
# 写入缓存
await self.redis.setex(
                cache_key,
300,  # 5分钟过期
                user.json()
            )
return user

💡 迁移指南:从PyMongo到ORM

# 你的旧代码
defold_way():
    user = db.users.find_one({"email""test@example.com"})
if user:
        user["last_login"] = datetime.now()
        db.users.update_one(
            {"_id": user["_id"]},
            {"$set": {"last_login": user["last_login"]}}
        )

# 新方式:选择你喜欢的ORM
# 方案1:MongoEngine
user = User.objects(email="test@example.com").first()
if user:
    user.update(set__last_login=datetime.now())

# 方案2:Beanie
user = await User.find_one(User.email == "test@example.com")
if user:
    user.last_login = datetime.now()
await user.save()

# 方案3:继续用PyMongo,但更优雅
classUserService:
def__init__(self, db):
        self.collection = db.users

asyncdefupdate_last_login(self, email):
await self.collection.update_one(
            {"email": email},
            {"$set": {"last_login": datetime.now()}},
            upsert=False
        )

🎯 选择建议

根据团队情况选择:

  • 新手团队/快速原型 → MongoEngine(文档最全)
  • 性能优先/高并发 → Motor + PyMongo(官方驱动)
  • 类型安全/现代语法 → Beanie或ODMantic
  • 已有PyMongo代码迁移 → 逐步引入Umongo

根据项目规模选择:

  • 小型项目/工具脚本 → PyMongo裸奔也不是不行
  • 中型SaaS应用 → Beanie或MongoEngine
  • 大型微服务架构 → Motor + 精心设计的Repository模式

结语

没有最好的ORM,只有最适合的ORM。建议:

  1. 先写原型:用你最熟悉的工具快速验证想法
  2. 评估需求:性能、类型安全、团队熟悉度
  3. 渐进迁移:不要一次性重写所有代码

最后提醒:无论选择哪个ORM,都要理解底层的MongoDB原理。ORM是工具,不是魔法,好的数据库设计和索引策略才是性能的关键!

END

资料领取

关注公众号,后台回复“资料领取”或点击“资料领取”菜单即可免费获取“软件测试”、“Python开发”相关资料~

请在微信客户端打开

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 18:05:57 HTTP/2.0 GET : https://f.mffb.com.cn/a/469250.html
  2. 运行时间 : 0.133804s [ 吞吐率:7.47req/s ] 内存消耗:4,851.87kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=6631ee6282aa6712fff9f4e7d871ff78
  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.000950s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001412s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.001749s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.001399s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001333s ]
  6. SELECT * FROM `set` [ RunTime:0.001759s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001499s ]
  8. SELECT * FROM `article` WHERE `id` = 469250 LIMIT 1 [ RunTime:0.001484s ]
  9. UPDATE `article` SET `lasttime` = 1770545157 WHERE `id` = 469250 [ RunTime:0.006246s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.001300s ]
  11. SELECT * FROM `article` WHERE `id` < 469250 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.002084s ]
  12. SELECT * FROM `article` WHERE `id` > 469250 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.006334s ]
  13. SELECT * FROM `article` WHERE `id` < 469250 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.006530s ]
  14. SELECT * FROM `article` WHERE `id` < 469250 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.004981s ]
  15. SELECT * FROM `article` WHERE `id` < 469250 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.008342s ]
0.137535s