当前位置:首页>python>【零基础学Python】第十八课:访问数据库—Python操作MySQL数据库入门

【零基础学Python】第十八课:访问数据库—Python操作MySQL数据库入门

  • 2026-03-12 02:04:00
【零基础学Python】第十八课:访问数据库—Python操作MySQL数据库入门

上两节课我们简单介绍了MySQL数据库的安装与配置及数据库可视化管理工具 Navicat Premium安装与使用,主要是为了学习Python如何操作MySQL数据库提供了环境支持,通过Navicat快速直观的查看Python操作数据的结果。本节课重点讲解通过Python编程语言如何操作数据库,实现数据的持久化存储。

1. Python操作MySQL数据库

1.1 首先安装Python MySQL连接库

安装pymysql第三方连接库,可以通过两种方式:

  • windows+R 打开运行窗口,输入cmd,打开命令行终端窗口,输入pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple (如图)

  • 打开PyCharm编辑器,打开终端(如图)输入:pip install pymysql -i 

https://pypi.tuna.tsinghua.edu.cn/simple ,回车

常用国内镜像源地址:

阿里云:http://mirrors.aliyun.com/pypi/simple/

豆瓣:http://pypi.douban.com/simple/

中国科学技术大学:https://pypi.mirrors.ustc.edu.cn/simple/

腾讯云:https://mirrors.cloud.tencent.com/pypi/simple

华为云:https://mirrors.huaweicloud.com/repository/pypi/simple/

1.2 验证安装

# 测试pymysql是否安装成功import pymysqlprint(pymysql.__version__)  # 显示版本号即表示安装成功

2. 连接MySQL服务器

我们已经安装了MySQL数据库管理系统,在创建数据库和表之前,Python要建立与MySQL数据库服务器的连接。

示例代码:

import pymysql# 建立数据库连接connection = pymysql.connect(    host='localhost',      # 数据库主机地址    user='root',  # 根用户root    password='root',  # 用户密码    )print("数据库连接成功!")connection.close()  # 关闭连接

3. 创建数据库和表

创建Python_study数据库,同时创建学生表students,学生表有六个字段,id(学生编号,自动增加,主键)、name(学生名字)、age(年龄)、grade(成绩)、enrollment_date(注册时间)、email(电子邮件)。

示例代码:

import pymysqltry:    # 连接MySQL服务器    connection = pymysql.connect(        host='localhost',        user='root',        password='root',    )    # 创建游标对象(用于执行SQL语句)    cursor = connection.cursor()    # 创建数据库    cursor.execute("CREATE DATABASE IF NOT EXISTS python_study")    print("数据库创建成功")    # 打开数据库    cursor.execute("USE python_study")    # 创建学生表    create_table_sql = """    CREATE TABLE IF NOT EXISTS students (        id INT AUTO_INCREMENT PRIMARY KEY,        name VARCHAR(50) NOT NULL,        age INT,        grade FLOAT,        enrollment_date DATE,        email VARCHAR(100) UNIQUE    )    """    cursor.execute(create_table_sql)    print("数据表创建成功")except pymysql.Error as e:    print(f"数据库操作失败:{e}")finally:    # 关闭连接    if connection:        connection.close()

运行结果:

打开navicat premium查看运行结果:

可见,通过navicat premium我们可以方便直观地查看运行结果,测试代码运行是否正确,这就是我们学习navicat premium主要目的。推荐我们在创建数据库和表时,采用navicat premium可视化管理工具(上节课我们学内容),从而提高编程效率。

4. 基本操作 (增删改查CRUD)

4.1 插入数据(Create)

import pymysqltry:    connection = pymysql.connect(        host='localhost',        user='root',        password='root',        database='python_study',        charset='utf8mb4'    )    cursor = connection.cursor()    # 方式1:插入单条数据    insert_sql = "INSERT INTO students (name, age, grade, enrollment_date, email) VALUES (%s, %s, %s, %s, %s)"    student_data = ('张三'2085.5'2024-09-01''zhangsan@example.com')    cursor.execute(insert_sql, student_data)    connection.commit()  # 提交事务    print(f"插入成功,影响行数:{cursor.rowcount}")    # 方式2:插入多条数据    students_data = [        ('李四'2192.0'2024-09-01''lisi@example.com'),        ('王五'1978.5'2024-09-01''wangwu@example.com'),        ('赵六'2288.0'2024-09-01''zhaoliu@example.com')    ]    cursor.executemany(insert_sql, students_data)    connection.commit()    print(f"批量插入成功,影响行数:{cursor.rowcount}")    # 获取插入的最后一个ID    last_id = cursor.lastrowid    print(f"最后插入的ID:{last_id}")except pymysql.Error as e:    print(f"插入失败:{e}")    connection.rollback()  # 发生错误时回滚finally:    if connection:        connection.close()

运行结果:

4.2 查询数据(Read)

import pymysqltry:    connection = pymysql.connect(        host='localhost',        user='root',        password='root',        database='python_study',        charset='utf8mb4'    )    # 使用DictCursor可以返回字典格式的结果    cursor = connection.cursor(pymysql.cursors.DictCursor)    # 1. 查询所有数据    cursor.execute("SELECT * FROM students")    all_students = cursor.fetchall()  # 获取所有结果    print("所有学生信息:")    for student in all_students:        print(f"ID:{student['id']},姓名:{student['name']},年龄:{student['age']}")    # 2. 查询单条数据    cursor.execute("SELECT * FROM students WHERE id = %s", (1,))    student = cursor.fetchone()  # 获取一条结果    if student:        print(f"\nID为1的学生:{student}")    # 3. 条件查询    cursor.execute("SELECT * FROM students WHERE age > %s AND grade >= %s", (2080))    filtered_students = cursor.fetchall()    print(f"\n年龄大于20且成绩>=80的学生:")    for student in filtered_students:        print(f"{student['name']} - 年龄:{student['age']},成绩:{student['grade']}")    # 4. 查询前N条数据    cursor.execute("SELECT * FROM students LIMIT 2")    top_2 = cursor.fetchall()    print(f"\n前2条数据:")    for student in top_2:        print(student)    # 5. 模糊查询    cursor.execute("SELECT * FROM students WHERE name LIKE %s", ('%张%',))    zhang_students = cursor.fetchall()    print(f"\n姓张的学生:")    for student in zhang_students:        print(student)except pymysql.Error as e:    print(f"查询失败:{e}")finally:    if connection:        connection.close()

运行结果:

4.3 修改数据(Update)

import pymysqltry:    connection = pymysql.connect(        host='localhost',        user='root',        password='root',        database='python_study',        charset='utf8mb4'    )    cursor = connection.cursor()    # 更新指定条件的数据    update_sql = "UPDATE students SET grade = %s WHERE name = %s"    cursor.execute(update_sql, (95.0'张三'))    connection.commit()    print(f"更新成功,影响行数:{cursor.rowcount}")    # 查看更新后的数据    cursor.execute("SELECT * FROM students WHERE name = '张三'")    result = cursor.fetchone()    print(f"更新后的数据:{result}")except pymysql.Error as e:    print(f"更新失败:{e}")    connection.rollback()finally:    if connection:        connection.close()
运行结果:
通过navicat 查看运行结果:

4.4 删除数据(Delete)

import pymysqltry:    connection = pymysql.connect(        host='localhost',        user='root',        password='root',        database='python_study',        charset='utf8mb4'    )    cursor = connection.cursor()    # 删除指定数据    delete_sql = "DELETE FROM students WHERE name = %s"    cursor.execute(delete_sql, ('赵六',))    connection.commit()    print(f"删除成功,影响行数:{cursor.rowcount}")    # 查看剩余数据    cursor.execute("SELECT COUNT(*) as count FROM students")    result = cursor.fetchone()    print(f"剩余学生数量:{result[0]}")except pymysql.Error as e:    print(f"删除失败:{e}")    connection.rollback()finally:    if connection:        connection.close()
运行结果:

5. 核心知识点——事务处理

5.1 什么是事务?

事务(Transaction) 是数据库管理系统执行过程中的一个逻辑单元,它由一组SQL语句组成,这些语句要么全部执行成功,要么全部不执行。

举一个生活中的例子来理解事务:

小张给小李转账1000元,这个事务分两个步骤:

1. 从小张账户中扣1000元

2. 给小李账号加1000元

事务要求:这两步骤要要么全部成功,要么全部失败。

5.2 常用的事务处理场景

  • 涉及金钱的操作(转账、支付、退款)

  • 多表关联操作(下订单、注册账号)

  • 数据一致性要求高(库存管理、票务系统)

  • 批量数据处理(批量导入、批量更新

5.3 事务处理好处

  • 数据安全:防止数据损坏

  • 错误恢复:出错能回到起点

  • 并发安全:多人操作不乱套

  • 业务完整:业务流程有保障

5.4  事务处理案例——银行转账

import pymysqldef transfer_money(from_id, to_id, amount):    """    转账示例:演示事务的使用    """    connection = None    try:        connection = pymysql.connect(            host='localhost',            user='root',            password='root',            database='python_study',            charset='utf8mb4'        )        # 开启事务        connection.begin()        cursor = connection.cursor()        # 扣除转出账户余额        cursor.execute("UPDATE accounts SET balance = balance - %s WHERE id = %s", (amount, from_id))        if cursor.rowcount == 0:            raise Exception("转出账户不存在")        # 增加转入账户余额        cursor.execute("UPDATE accounts SET balance = balance + %s WHERE id = %s", (amount, to_id))        if cursor.rowcount == 0:            raise Exception("转入账户不存在")        # 提交事务        connection.commit()        print("转账成功!")    except Exception as e:        print(f"转账失败:{e}")        if connection:            connection.rollback()  # 发生错误时回滚    finally:        if connection:            connection.close()

记住一句话:

当多个数据库操作必须作为一个整体时,就用事务来保护它们!

6. 编程实践技巧

6.1 防止SQL注入入侵

import pymysql# 错误示例:容易受到SQL注入攻击def unsafe_query(name):    connection = pymysql.connect(...)    cursor = connection.cursor()    # 危险的写法!    sql = f"SELECT * FROM students WHERE name = '{name}'"    cursor.execute(sql)  # 如果name包含恶意SQL代码,会执行# 正确示例:使用参数化查询def safe_query(name):    connection = pymysql.connect(...)    cursor = connection.cursor()    # 安全的写法!    sql = "SELECT * FROM students WHERE name = %s"    cursor.execute(sql, (name,))  # 参数会自动转义

6.2 使用with语句管理连接

import pymysqlfrom contextlib import closingwith closing(pymysql.connect(    host='localhost',    user='root',    password='123456',    database='python_study',    charset='utf8mb4')) as connection:    with connection.cursor() as cursor:        cursor.execute("SELECT * FROM students")        results = cursor.fetchall()        for row in results:            print(row)

6.3 封装数据库操作类

import pymysqlfrom pymysql.cursors import DictCursorclass MySQLHelper:    def __init__(self, host, user, password, database):        self.config = {            'host': host,            'user': user,            'password': password,            'database': database,            'charset''utf8mb4',            'cursorclass': DictCursor        }    def __enter__(self):        self.connection = pymysql.connect(**self.config)        return self    def __exit__(self, exc_type, exc_val, exc_tb):        if self.connection:            self.connection.close()    def query(self, sql, params=None):        with self.connection.cursor() as cursor:            cursor.execute(sql, params or ())            return cursor.fetchall()    def execute(self, sql, params=None):        with self.connection.cursor() as cursor:            cursor.execute(sql, params or ())            self.connection.commit()            return cursor.rowcount# 使用示例with MySQLHelper('localhost''root''root''python_study'as db:    students = db.query("SELECT * FROM students WHERE age > %s", (18,))    for student in students:        print(student)

    6.4 注意事项

    1. 资源管理

      • 每次操作后记得关闭连接和游标
      • 使用with语句管理数据库连接
      • 避免长时间占用连接
    2. 安全性

      • 永远不要直接拼接SQL字符串
      • 使用参数化查询防止SQL注入
      • 数据库密码等敏感信息不要硬编码在代码中
    3. 性能优化

      • 批量操作时使用executemany
      • 合理使用索引
      • 避免SELECT *,只查询需要的字段
    4. 异常处理

      • 总是使用try-except捕获数据库异常
      • 事务操作记得回滚
      • 记录错误日志

    7. 常见错误处理

    def safe_database_operation():    try:        connection = pymysql.connect(            host='localhost',            user='your_username',            password='your_password',            database='python_demo'        )        with connection.cursor() as cursor:            # 你的数据库操作代码            pass    except pymysql.err.OperationalError as e:        print(f"连接数据库失败: {e}")    except pymysql.err.ProgrammingError as e:        print(f"SQL语法错误: {e}")    except pymysql.err.IntegrityError as e:        print(f"数据完整性错误(如重复键): {e}")    except Exception as e:        print(f"发生未知错误: {e}")    finally:        if 'connection' in locals() and connection:            connection.close()
    8. 应用案例——数据备份与恢复
    import pymysqlimport jsonimport datetimeclass DatabaseBackup:    def __init__(self, host, user, password, database):        self.connection = pymysql.connect(            host=host,            user=user,            password=password,            database=database,            charset='utf8mb4'        )    def backup_table(self, table_name, backup_file):        """备份指定表"""        try:            cursor = self.connection.cursor(pymysql.cursors.DictCursor)            # 查询所有数据            cursor.execute(f"SELECT * FROM {table_name}")            data = cursor.fetchall()            # 获取表结构            cursor.execute(f"SHOW CREATE TABLE {table_name}")            create_table_sql = cursor.fetchone()[1]            # 创建备份文件            backup_data = {                'table': table_name,                'create_sql': create_table_sql,                'data': data,                'backup_time': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')            }            with open(backup_file, 'w', encoding='utf-8'as f:                json.dump(backup_data, f, ensure_ascii=False, indent=2, default=str)            print(f"表 {table_name} 已备份到 {backup_file}")            print(f"备份记录数:{len(data)}")        except Exception as e:            print(f"备份失败:{e}")    def restore_table(self, backup_file):        """从备份文件恢复表"""        try:            # 读取备份文件            with open(backup_file, 'r', encoding='utf-8'as f:                backup_data = json.load(f)            cursor = self.connection.cursor()            # 删除原表            cursor.execute(f"DROP TABLE IF EXISTS {backup_data['table']}")            # 重新创建表            cursor.execute(backup_data['create_sql'])            # 插入数据            if backup_data['data']:                columns = backup_data['data'][0].keys()                placeholders = ','.join(['%s'] * len(columns))                insert_sql = f"INSERT INTO {backup_data['table']} ({','.join(columns)}) VALUES ({placeholders})"                for row in backup_data['data']:                    cursor.execute(insert_sql, list(row.values()))            self.connection.commit()            print(f"从 {backup_file} 恢复成功")            print(f"恢复记录数:{len(backup_data['data'])}")        except Exception as e:            self.connection.rollback()            print(f"恢复失败:{e}")# 使用示例backup = DatabaseBackup('localhost''root''root''python_study')backup.backup_table('students''students_backup.json')# backup.restore_table('students_backup.json')

    9. 最佳实践建议

    • 始终使用参数化查询,防止SQL注入攻击

    • 及时关闭数据库连接,避免资源泄露

    • 使用事务确保数据一致性

    • 添加适当的异常处理

    • 不要在代码中硬编码数据库配置,使用配置文件

    • 为频繁查询的字段创建索引

    • 定期备份数据库

    记住:实践是最好的老师。建议你:

    • 多动手写代码,不要只看不练
    • 从简单的程序开始,逐步增加复杂度
    • 遇到问题先自己尝试解决,查阅文档
    • 养成良好的编码习惯,注重代码规范

    这个教程涵盖了Python操作MySQL的基本操作,从安装配置到实际应用都有详细示例。建议你按照教程顺序练习,从简单的CRUD操作开始,逐步掌握更高级的功能。

    参考资料:

    1.《MySQL必知必会》——(英)福塔(Forta, B.)著;刘晓霞, 钟鸣译 . —北京:人民邮电出版社。

    祝你在马年学习进步,马上成功!

    最新文章

    随机文章

    基本 文件 流程 错误 SQL 调试
    1. 请求信息 : 2026-03-27 20:51:32 HTTP/2.0 GET : https://f.mffb.com.cn/a/479330.html
    2. 运行时间 : 0.191743s [ 吞吐率:5.22req/s ] 内存消耗:4,749.74kb 文件加载:140
    3. 缓存信息 : 0 reads,0 writes
    4. 会话信息 : SESSION_ID=1ef5e325e36211fb0473609ad29b7a05
    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.000625s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
    2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000717s ]
    3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.002093s ]
    4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000364s ]
    5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000721s ]
    6. SELECT * FROM `set` [ RunTime:0.000672s ]
    7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000633s ]
    8. SELECT * FROM `article` WHERE `id` = 479330 LIMIT 1 [ RunTime:0.003106s ]
    9. UPDATE `article` SET `lasttime` = 1774615892 WHERE `id` = 479330 [ RunTime:0.010243s ]
    10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.001723s ]
    11. SELECT * FROM `article` WHERE `id` < 479330 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.006212s ]
    12. SELECT * FROM `article` WHERE `id` > 479330 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.005179s ]
    13. SELECT * FROM `article` WHERE `id` < 479330 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.014314s ]
    14. SELECT * FROM `article` WHERE `id` < 479330 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.028499s ]
    15. SELECT * FROM `article` WHERE `id` < 479330 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.007542s ]
    0.193321s