🌙
交互式练习

LLM 练习 010

38 道题 · 选择题 + 填空题 + 简答题 + 代码实战 · 即时反馈 · 记录保存
← 返回主页
客观题
0/20
主观题
0/18
做题记录

做题记录

    暂无记录

    答题详情

    一、单选题(10 题)
    第 1 题单选题
    PyMySQL 的主要作用是( )
    A 保存 MySQL 数据文件
    B 让 Python 连接并操作 MySQL
    C 替代 SQL 语句
    D 替代 Redis 服务
    第 2 题单选题
    执行 SELECT 查询后,要把结果取回 Python,通常使用( )
    A commit()
    B rollback()
    C fetchall()
    D close()
    第 3 题单选题
    下列哪类 SQL 执行后通常需要 commit()?( )
    A SELECT
    B UPDATE
    C DESC 表名
    D SHOW DATABASES
    第 4 题单选题
    rollback() 的作用是( )
    A 提交事务
    B 撤销本次未提交的修改
    C 获取全部查询结果
    D 创建数据库连接
    第 5 题单选题
    Redis 主要基于( )读写,所以速度快
    A 内存
    B 光盘
    C U 盘
    D 打印机
    第 6 题单选题
    pip install redis 安装的是( )
    A Redis 服务本身
    B Python 操作 Redis 的客户端库
    C MySQL 服务
    D PyMySQL
    第 7 题单选题
    Redis 中适合做缓存和计数器的常见类型是( )
    A String
    B Hash
    C List
    D Set
    第 8 题单选题
    Redis 中适合存储用户对象多个字段的类型是( )
    A String
    B Hash
    C List
    D Sorted Set
    第 9 题单选题
    Redis 中适合做排行榜的类型是( )
    A List
    B Set
    C Sorted Set
    D Hash
    第 10 题单选题
    缓存和会话数据通常需要设置( ),避免长期占用内存或旧数据一直存在
    A 主键
    B TTL 过期时间
    C SQL 语句
    D 外键
    二、填空题(10 题)
    第 11 题填空题
    PyMySQL 是 Python 操作数据库的第三方库。
    第 12 题填空题
    查询语句执行后,如果要获取全部结果,可以使用方法。
    第 13 题填空题
    INSERT、UPDATE、DELETE 会改变数据库内容,执行成功后通常需要
    第 14 题填空题
    出错时撤销本次未提交修改,可以使用
    第 15 题填空题
    修改和删除语句必须写清楚条件,避免误改或误删整张表。
    第 16 题填空题
    Redis 是一种基于内存的存储数据库。
    第 17 题填空题
    Python 操作 Redis 的客户端库通常叫 redis-py,安装命令是 pip install
    第 18 题填空题
    Redis 的 setex 可以设置值,并同时设置时间。
    第 19 题填空题
    Redis 的 incr 常用于阅读数、点赞数等场景。
    第 20 题填空题
    Redis 的 ttl 用于查看 key 的剩余时间。
    三、简答题(10 题)
    第 21 题简答题
    请说明 Python、PyMySQL、MySQL 三者关系。
    查看参考答案 ▼
    Python 负责业务逻辑,PyMySQL 负责连接 MySQL 并执行 SQL,MySQL 负责真正存储和管理数据。
    第 22 题简答题
    为什么查询语句不需要 commit(),但增删改需要?
    查看参考答案 ▼
    查询只是读取数据,不改变数据库内容,所以不需要提交;增删改会改变数据库内容,必须提交后才真正保存。
    第 23 题简答题
    fetchall() 和 commit() 分别适合什么场景?
    查看参考答案 ▼
    fetchall() 适合查询场景,用来把查询结果取回 Python;commit() 适合新增、删除、修改场景,用来提交事务。
    第 24 题简答题
    为什么修改数据时要检查 row_count?
    查看参考答案 ▼
    因为 row_count 可以确认本次操作影响了几行数据,避免没有修改到目标数据,或误改多行数据。
    第 25 题简答题
    请用小明给小妹转账 520 的例子说明为什么需要事务。
    查看参考答案 ▼
    转账 520 至少包含小明扣款和小妹加钱两步。如果小明扣款成功但小妹没收到,就出现数据错误。事务可以保证两步要么都成功,要么都失败。
    第 26 题简答题
    Redis 和 MySQL 的核心区别是什么?
    查看参考答案 ▼
    MySQL 是关系型数据库,适合存结构化核心数据,支持 SQL 和复杂查询;Redis 是基于内存的键值数据库,适合缓存、会话、计数、排行榜等高速访问场景。
    第 27 题简答题
    Redis 为什么常用于缓存?
    查看参考答案 ▼
    因为 Redis 主要基于内存读写,速度快,适合保存热点数据,减少 MySQL 的重复查询压力。
    第 28 题简答题
    Redis 服务和 redis-py 有什么区别?
    查看参考答案 ▼
    Redis 服务是真正存储数据的数据库程序;redis-py 是 Python 操作 Redis 的客户端库。
    第 29 题简答题
    请分别举例说明 Redis 的 String、Hash、List、Set、Sorted Set 适合什么场景。
    查看参考答案 ▼
    String 适合缓存和计数器;Hash 适合用户对象;List 适合任务队列;Set 适合去重和共同标签;Sorted Set 适合排行榜。
    第 30 题简答题
    为什么缓存和会话通常要设置过期时间?
    查看参考答案 ▼
    因为缓存和会话通常是临时数据,设置过期时间可以避免旧数据长期存在,也能减少 Redis 内存占用。
    四、代码实战(8 题)
    第 31 题代码实战
    模仿题 1:PyMySQL 查询 AI 工具
    连接 ai_work_demo 数据库,查询 ai_tools 表中所有工具的 name 和 status。
    查看参考答案 ▼
    import pymysql conn = pymysql.connect( host="127.0.0.1", port=3306, user="root", password="123456", database="ai_work_demo", charset="utf8mb4" ) cursor = conn.cursor() try: sql = "SELECT name, status FROM ai_tools;" cursor.execute(sql) rows = cursor.fetchall() for name, status in rows: status_text = "已启用" if status == 1 else "未启用" print(f"工具:{name},状态:{status_text}") finally: cursor.close() conn.close()
    第 32 题代码实战
    模仿题 2:redis-py 连接测试
    使用 redis-py 连接本机 Redis,执行 ping(),并设置 day08:name 为张三。
    查看参考答案 ▼
    import redis r = redis.Redis( host="localhost", port=6379, db=0, decode_responses=True ) try: print(r.ping()) r.set("day08:name", "张三") print(r.get("day08:name")) finally: r.close()
    第 33 题代码实战
    模仿题 3:Redis String 计数器
    使用 Redis String 记录文章 1001 的阅读数,初始化为 0,然后自增 3 次。
    查看参考答案 ▼
    import redis r = redis.Redis(host="localhost", port=6379, db=0, decode_responses=True) try: view_key = "day08:article:1001:views" r.set(view_key, "0") r.incr(view_key) r.incr(view_key) r.incr(view_key) print("当前阅读数:", r.get(view_key)) finally: r.close()
    第 34 题代码实战
    变体题 1:PyMySQL 启用 LangChain
    把 MySQL 中 LangChain 的状态从未启用改成已启用,要求使用 commit() 和 rollback()。
    查看参考答案 ▼
    import pymysql conn = pymysql.connect( host="127.0.0.1", port=3306, user="root", password="123456", database="ai_work_demo", charset="utf8mb4" ) cursor = conn.cursor() try: sql = "UPDATE ai_tools SET status = %s WHERE name = %s AND status = %s;" params = (1, "LangChain", 0) row_count = cursor.execute(sql, params) if row_count != 1: raise Exception(f"期望修改 1 行,实际修改了 {row_count} 行") conn.commit() print("LangChain 已启用") except Exception as error: conn.rollback() print("启用失败,已回滚:", error) finally: cursor.close() conn.close()
    第 35 题代码实战
    变体题 2:Redis Hash 存储用户信息
    使用 Redis Hash 保存用户 user:2001 的 name、age、city,并打印完整用户信息。
    查看参考答案 ▼
    import redis r = redis.Redis(host="localhost", port=6379, db=0, decode_responses=True) try: user_key = "day08:user:2001" r.hset(user_key, mapping={ "name": "王五", "age": "28", "city": "广州" }) print(r.hgetall(user_key)) finally: r.close()
    第 36 题代码实战
    变体题 3:Redis Set 做标签去重
    向 Redis Set 中添加 python、redis、python、ai 四个标签,观察去重效果。
    查看参考答案 ▼
    import redis r = redis.Redis(host="localhost", port=6379, db=0, decode_responses=True) try: tag_key = "day08:tags" r.delete(tag_key) r.sadd(tag_key, "python", "redis", "python", "ai") print(r.smembers(tag_key)) finally: r.close()
    第 37 题代码实战
    综合案例 1:MySQL 查询 + Redis 缓存
    先用 PyMySQL 查询 ai_tools 表中已启用的工具;再把查询结果写入 Redis,key 为 day08:enabled_tools,设置 60 秒过期时间。
    查看参考答案 ▼
    import json import pymysql import redis mysql_conn = pymysql.connect( host="127.0.0.1", port=3306, user="root", password="123456", database="ai_work_demo", charset="utf8mb4" ) mysql_cursor = mysql_conn.cursor() redis_client = redis.Redis(host="localhost", port=6379, db=0, decode_responses=True) try: sql = "SELECT name, scene FROM ai_tools WHERE status = %s;" mysql_cursor.execute(sql, (1,)) rows = mysql_cursor.fetchall() enabled_tools = [] for name, scene in rows: enabled_tools.append({"name": name, "scene": scene}) cache_key = "day08:enabled_tools" redis_client.setex(cache_key, 60, json.dumps(enabled_tools, ensure_ascii=False)) print("已启用工具已写入 Redis 缓存:", enabled_tools) finally: mysql_cursor.close() mysql_conn.close() redis_client.close()
    第 38 题代码实战
    综合案例 2:Redis 排行榜
    使用 Redis Sorted Set 保存 AI 工具热度榜:ChatGPT 1000 分,DeepSeek 900 分,Dify 800 分;查询并打印热度从高到低的排行榜。
    查看参考答案 ▼
    import redis r = redis.Redis(host="localhost", port=6379, db=0, decode_responses=True) try: rank_key = "day08:ai_tool_hot_rank" r.delete(rank_key) r.zadd(rank_key, { "ChatGPT": 1000, "DeepSeek": 900, "Dify": 800 }) ranks = r.zrevrange(rank_key, 0, -1, withscores=True) for index, (tool_name, score) in enumerate(ranks, start=1): print(f"第 {index} 名:{tool_name},热度:{score}") finally: r.close()