当前位置:首页>python>Python 零基础100天—Day60 Django 模型层

Python 零基础100天—Day60 Django 模型层

  • 2026-08-18 23:10:37
Python 零基础100天—Day60 Django 模型层

Django 模型层 — 数据的基石

🕐 预计用时:2-3 小时 | 🎯 目标:掌握 Django ORM 的字段类型、关系定义、QuerySet 查询和数据库迁移


📖 今日目录

  1. 定义模型
  2. 字段类型
  3. 字段选项
  4. 模型关系
  5. QuerySet 基础查询
  6. QuerySet 进阶查询
  7. 聚合与分组
  8. 数据库迁移(makemigrations + migrate)
  9. Meta 选项
  10. 今日练习
  11. 今日小结

1. 定义模型

📋 模型 = 数据库表的 Python 类

# blog/models.py
from django.db import models
from django.contrib.auth.models import User  # Django 自带的用户模型

class Category(models.Model):
    name = models.CharField('分类名称', max_length=50, unique=True)
    description = models.TextField('描述', blank=True, default='')
    created_at = models.DateTimeField('创建时间', auto_now_add=True)

    class Meta:
        verbose_name = '分类'
        verbose_name_plural = '分类'
        ordering = ['name']

    def __str__(self):
        return self.name

    @property
    def post_count(self):
        return self.posts.count()

class Post(models.Model):
    STATUS_CHOICES = [
        ('draft', '草稿'),
        ('published', '已发布'),
    ]

    title = models.CharField('标题', max_length=200)
    slug = models.SlugField('URL 别名', max_length=200, unique=True)
    content = models.TextField('内容')
    summary = models.CharField('摘要', max_length=300, blank=True)
    status = models.CharField('状态', max_length=10, choices=STATUS_CHOICES, default='draft')
    views = models.PositiveIntegerField('浏览量', default=0)

    created_at = models.DateTimeField('创建时间', auto_now_add=True)
    updated_at = models.DateTimeField('更新时间', auto_now=True)

    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='posts', verbose_name='作者')
    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True, related_name='posts', verbose_name='分类')
    tags = models.ManyToManyField('Tag', blank=True, related_name='posts', verbose_name='标签')

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = '文章'
        ordering = ['-created_at']
        indexes = [
            models.Index(fields=['-created_at']),
            models.Index(fields=['slug']),
        ]

    def __str__(self):
        return self.title

💡 Django 模型 vs SQLAlchemy 模型对比:

# SQLAlchemy(Flask)
class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(200))

# Django
class Post(models.Model):
title = models.CharField(max_length=200)
# id 自动创建!


Django 不需要手动定义 id 主键,它会自动添加 id = AutoField(primary_key=True)


2. 字段类型

字段
数据库类型
说明
示例
CharField
VARCHAR
短文本(需 max_length)
CharField(max_length=100)
TextField
TEXT
长文本
TextField()
IntegerField
INT
整数
IntegerField(default=0)
FloatField
FLOAT
浮点数
FloatField()
DecimalField
DECIMAL
精确小数(金额)
DecimalField(max_digits=10, decimal_places=2)
BooleanField
BOOLEAN
布尔值
BooleanField(default=True)
DateField
DATE
日期
DateField(auto_now_add=True)
DateTimeField
DATETIME
日期时间
DateTimeField(auto_now=True)
EmailField
VARCHAR
邮箱(自动验证)
EmailField()
URLField
VARCHAR
URL(自动验证)
URLField()
SlugField
VARCHAR
URL 友好字符串
SlugField(max_length=200)
FileField
VARCHAR
文件上传
FileField(upload_to='uploads/')
ImageField
VARCHAR
图片上传
ImageField(upload_to='images/')
JSONField
JSON
JSON 数据
JSONField(default=dict)

🔧 字段常用参数

参数
作用
示例
null
数据库允许 NULL
CharField(null=True)
blank
表单允许空值
CharField(blank=True)
default
默认值
IntegerField(default=0)
unique
唯一约束
CharField(unique=True)
choices
下拉选项
CharField(choices=STATUS)
verbose_name
人类可读名称
CharField(verbose_name='用户名')
db_index
创建索引
CharField(db_index=True)

⚠️ null vs blank 的区别:

• null=True:数据库层面允许 NULL(空值存储)
• blank=True:表单验证层面允许空(不填也行)

通常一起用:CharField(null=True, blank=True)
但 CharField/TextField 不建议用 null=True(用 blank=True, default='' 更好)。


3. 字段选项

📅 auto_now vs auto_now_add

# auto_now_add=True:创建时自动设置,之后不再变
created_at = models.DateTimeField(auto_now_add=True)
# 第一次 save 时自动设为当前时间,之后修改不会变

# auto_now=True:每次 save 都更新
updated_at = models.DateTimeField(auto_now=True)
# 每次调用 save() 都更新为当前时间

📋 choices 选项

class Post(models.Model):
    STATUS_CHOICES = [
        ('draft', '草稿'),
        ('published', '已发布'),
        ('archived', '已归档'),
    ]

    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')

    # 使用
    # post.status → 'draft'
    # post.get_status_display() → '草稿'(显示中文)

4. 模型关系

🔗 一对多(ForeignKey)

# 一个用户有多篇文章
class Post(models.Model):
    author = models.ForeignKey(
        User,                    # 关联的模型
        on_delete=models.CASCADE, # 删除作者时,文章也删除
        related_name='posts',    # 反向引用:user.posts.all()
    )

# on_delete 选项:
# CASCADE     → 级联删除(删作者,文章也删)
# PROTECT     → 保护(有文章的作者不能删)
# SET_NULL    → 设为 NULL(需要 null=True)
# SET_DEFAULT → 设为默认值
# DO_NOTHING  → 什么都不做(不推荐)

# 使用
post = Post.objects.get(id=1)
post.author          # 获取文章的作者(正向)
user.posts.all()     # 获取用户的所有文章(反向)

🔗 多对多(ManyToManyField)

# 文章和标签:一篇文章多个标签,一个标签对应多篇文章
class Tag(models.Model):
    name = models.CharField(max_length=50, unique=True)

class Post(models.Model):
    tags = models.ManyToManyField(Tag, related_name='posts', blank=True)

# 使用
post.tags.add(tag1, tag2)       # 添加标签
post.tags.remove(tag1)          # 移除标签
post.tags.all()                 # 获取文章的所有标签
tag.posts.all()                 # 获取标签下的所有文章

# 创建时添加
post = Post.objects.create(title='Hello', author=user)
post.tags.set([tag1, tag2, tag3])  # 设置标签(覆盖)

🔗 一对一(OneToOneField)

# 用户和用户资料:一个用户只有一份资料
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
    bio = models.TextField(blank=True)
    avatar = models.ImageField(upload_to='avatars/', blank=True)

# 使用
user.profile.bio     # 获取用户的个人简介
profile.user         # 获取资料对应的用户

📊 关系对比

关系
字段
例子
查询方式
一对多
ForeignKey
用户→文章
user.posts.all()
多对多
ManyToManyField
文章↔标签
post.tags.all()
一对一
OneToOneField
用户↔资料
user.profile

5. QuerySet 基础查询

📖 获取所有 / 获取单个

# 获取所有记录
all_posts = Post.objects.all()          # SELECT * FROM posts

# 获取单个
post = Post.objects.get(id=1)           # 获取 id=1 的文章(不存在会报错)
post = Post.objects.get(pk=1)           # pk = primary_key(等价于 id=1)

# 安全获取(不存在返回 None)
post = Post.objects.filter(id=1).first()

# 获取或返回 404
from django.shortcuts import get_object_or_404
post = get_object_or_404(Post, pk=1)    # 不存在返回 404 页面

🔍 过滤查询

# filter(返回 QuerySet,可能有多条)
published = Post.objects.filter(status='published')
# SELECT * FROM posts WHERE status = 'published'

recent = Post.objects.filter(views__gte=100)
# SELECT * FROM posts WHERE views >= 100

# exclude(排除符合条件的)
not_draft = Post.objects.exclude(status='draft')
# SELECT * FROM posts WHERE status != 'draft'

# 链式过滤
popular_published = Post.objects.filter(status='published').filter(views__gte=100)
# SELECT * FROM posts WHERE status='published' AND views >= 100

📋 字段查找(Field Lookups)

查找
SQL
示例
exact=filter(title__exact='Hello')
iexact=
(不区分大小写)
filter(title__iexact='hello')
containsLIKE '%x%'filter(title__contains='Django')
icontainsLIKE '%x%'
(不区分)
filter(title__icontains='django')
gt / gte> / >=filter(views__gte=100)
lt / lte< / <=filter(views__lt=100)
inIN (...)filter(status__in=['draft','published'])
rangeBETWEENfilter(created_at__range=(start, end))
isnullIS NULLfilter(category__isnull=True)
startswithLIKE 'x%'filter(title__startswith='Django')
year / month
按年/月
filter(created_at__year=2026)

6. QuerySet 进阶查询

📊 排序与切片

# 排序
Post.objects.order_by('created_at')       # 升序
Post.objects.order_by('-created_at')      # 降序(- 表示降序)
Post.objects.order_by('-views', 'title')  # 先按浏览量降序,再按标题升序

# 切片(对应 SQL 的 LIMIT + OFFSET)
Post.objects.all()[:5]                    # 前 5 条
Post.objects.all()[5:10]                  # 第 6-10 条

# 去重
Post.objects.values('category').distinct()

🔗 跨关系查询(JOIN)

# 查询作者名为 "alice" 的所有文章
Post.objects.filter(author__username='alice')
# SELECT * FROM posts INNER JOIN users ON posts.author_id = users.id
#                   WHERE users.username = 'alice'

# 查询分类名为 "Python" 的文章
Post.objects.filter(category__name='Python')

# 双下划线链式跨越
Post.objects.filter(author__profile__bio__contains='Python')

📋 Q 对象(复杂条件)

from django.db.models import Q

# OR 条件
Post.objects.filter(Q(views__gte=100) | Q(status='published'))
# WHERE views >= 100 OR status = 'published'

# NOT 条件
Post.objects.filter(~Q(status='draft'))
# WHERE status != 'draft'

# 复合条件
Post.objects.filter(
    Q(status='published') & (Q(title__contains='Django') | Q(title__contains='Flask'))
)
# WHERE status='published' AND (title LIKE '%Django%' OR title LIKE '%Flask%')

7. 聚合与分组

from django.db.models import Count, Sum, Avg, Max, Min

# 聚合函数
Post.objects.aggregate(total_views=Sum('views'))
# {'total_views': 12345}

Post.objects.aggregate(avg_views=Avg('views'), max_views=Max('views'))
# {'avg_views': 123.5, 'max_views': 5000}

# 分组统计(annotate = GROUP BY)
from django.db.models import Count

# 每个分类的文章数量
Category.objects.annotate(post_count=Count('posts')).values('name', 'post_count')
# [{'name': 'Python', 'post_count': 15}, {'name': 'Flask', 'post_count': 8}]

# 每个作者的文章数,按数量降序
Post.objects.values('author__username').annotate(count=Count('id')).order_by('-count')

# 筛选分组结果(HAVING)
Category.objects.annotate(post_count=Count('posts')).filter(post_count__gte=5)
# 只返回文章数 >= 5 的分类

8. 数据库迁移

🔄 Django 迁移 vs Flask-Migrate

操作
Django
Flask-Migrate
生成迁移
python manage.py makemigrationsflask db migrate
执行迁移
python manage.py migrateflask db upgrade
回滚迁移
python manage.py migrate blog 0003flask db downgrade
查看迁移状态
python manage.py showmigrationsflask db history
查看 SQL
python manage.py sqlmigrate blog 0001
# 迁移四步法
# 1. 修改 models.py(添加字段、新建模型等)
# 2. 生成迁移文件
python manage.py makemigrations
# 输出:Migrations for 'blog':
#   blog/migrations/0001_initial.py
#     - Create model Post
#     - Create model Category

# 3. 查看迁移会执行的 SQL
python manage.py sqlmigrate blog 0001

# 4. 执行迁移
python manage.py migrate
# 输出:Applying blog.0001_initial... OK

💡 Django 迁移的优势:

• 自动检测模型变化,生成迁移文件
• 迁移文件是 Python 代码,可以自定义数据迁移
• sqlmigrate 可以预览 SQL,安全第一
• 支持多应用独立迁移
• 迁移文件应该提交到 Git


9. Meta 选项

class Post(models.Model):
    # ... 字段定义 ...

    class Meta:
        # 表名(默认:app名_类名小写,如 blog_post)
        db_table = 'posts'

        # 排序(默认排序)
        ordering = ['-created_at']

        # 唯一约束
        unique_together = [['author', 'slug']]  # 同一作者的 slug 不能重复

        # 人类可读名称
        verbose_name = '文章'
        verbose_name_plural = '文章'

        # 索引
        indexes = [
            models.Index(fields=['-created_at']),
            models.Index(fields=['author', 'status']),
        ]

10. 今日练习

🏋️ 练习 1:博客模型

# 完善 Day59 的博客项目模型:
# - Category:name, description
# - Post:title, content, summary, status, views, author(FK), category(FK), tags(M2M)
# - Tag:name
# - Comment:content, author(FK), post(FK), created_at
# 要求:定义好所有关系和 Meta

🏋️ 练习 2:QuerySet 查询

# 完成以下查询(用 Django shell 验证):
# 1. 获取所有已发布文章
# 2. 获取浏览量前 10 的文章
# 3. 搜索标题包含 "Django" 的文章
# 4. 获取某个分类下的所有文章
# 5. 统计每个分类的文章数量
# 6. 获取某个用户发表的所有评论

🏋️ 练习 3:数据库迁移

# 1. 为模型生成初始迁移
# 2. 用 sqlmigrate 查看 SQL
# 3. 执行迁移
# 4. 给 Post 添加 tags 字段(ManyToManyField)
# 5. 生成迁移并执行
# 6. 验证数据未丢失

11. 今日小结

知识点
核心内容
定义模型
models.Model + 字段类型 + Meta 选项
字段类型
CharField/TextField/IntegerField/DateTimeField/ForeignKey
字段选项
null/blank/default/unique/choices/auto_now
关系
ForeignKey(一对多)/ ManyToManyField(多对多)/ OneToOneField(一对一)
QuerySet
filter/exclude/order_by/slice/链式调用
字段查找
双下划线 __:contains/gte/in/range/year/isnull
Q 对象
复杂条件:OR(|) / NOT(~) / AND(&)
聚合
aggregate(Sum/Avg/Count) + annotate(分组)
迁移
makemigrations → migrate,安全修改表结构

🚀 明日预告:Day 61 — Django 视图层

模型层就绪了,明天深入视图层——函数视图(FBV)vs 类视图(CBV)、HttpRequest/HttpResponse、重定向、装饰器。让你的 Django 应用真正能响应用户的请求!

轻松时刻:

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-22 01:58:02 HTTP/2.0 GET : https://f.mffb.com.cn/a/505140.html
  2. 运行时间 : 0.310978s [ 吞吐率:3.22req/s ] 内存消耗:4,659.75kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=7483ff795db565eb412b4310b66050bc
  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.001119s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001420s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000621s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000596s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001240s ]
  6. SELECT * FROM `set` [ RunTime:0.000525s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001228s ]
  8. SELECT * FROM `article` WHERE `id` = 505140 LIMIT 1 [ RunTime:0.001008s ]
  9. UPDATE `article` SET `lasttime` = 1787335082 WHERE `id` = 505140 [ RunTime:0.072747s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000754s ]
  11. SELECT * FROM `article` WHERE `id` < 505140 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001270s ]
  12. SELECT * FROM `article` WHERE `id` > 505140 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001295s ]
  13. SELECT * FROM `article` WHERE `id` < 505140 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.003273s ]
  14. SELECT * FROM `article` WHERE `id` < 505140 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001495s ]
  15. SELECT * FROM `article` WHERE `id` < 505140 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.044585s ]
0.314827s