第4关

任务描述

在现在的软件、web 开发中,越来越离不开数据库的支持,MySQL 是现在最流行的关系型数据库管理系统(RDBMS - Relational Database Management System),在 WEB 开发中,MySQL 是最好的 RDBMS 应用软件之一。在本教程中,会让大家快速掌握 python 使用 MySQL 的相关知识,并轻松使用 MySQL 数据库。
本关任务:使用 pymysql 从数据库中查询数据。

相关知识

如何使用 pymysql 连接指定数据库并且查询符合条件的记录?
以下是一个样例代码:

#!/usr/bin/python  
# -*- coding: UTF-8 -*-
import pymysql
# 创建数据库连接  
conn = pymysql.connect(  
    # mysql服务器主机地址  
    host='127.0.0.1',  
    # mysql服务器连接端口  
    port=3306,  
    # 用户名  
    user='user',  
    # 数据库名  
    db='db_name',  
    # 用户密码  
    passwd='password',  
    # 编码格式  
    charset='utf8'  
)  
# 使用cursor()函数创建一个游标对象  
cursor = conn.cursor()  
# 使用execute()函数执行一条sql语句, 从area表中获取所有id小于等于2的记录,并且以area_id降序排列  
cursor.execute("select area_id, area_name from area where id<=2 ORDER BY area_id DESC")  
# 使用fetchall()函数返回所有的结果,结果以元组的形式返回(每条记录都以一个储存了各个列的值的元组存在)  
res = cursor.fetchall()  
print(res)  
# 关闭游标  
cursor.close()  
# 关闭数据库连接  
conn.close()

输出的结果如下:

((2, '长沙'), (1, '北京'))

补充:
pymysql中获取数据常用的有2个函数,分别是:fetchall()返回所有记录,fetchone()返回单条记录。以及一个只读属性rowcount并返回执行execute()方法后受影响的行数
数据库中有where字句,返回当where条件成立的数据
关于order by,常用于对数据进行排序常用值有2个desc表示降序排列,asc表示升序排列

编程要求

根据提示,在右侧编辑器补充代码,查询user表中所有的结果,以如下形式显示,每条数据以元组的形式输出,每行输出一条数据:

(5,'teble4','teble4')  
(4,'teble3','teble3')  
(3,'teble2','teble2')  
(2,'teble1','teble1')  
(1,'teble0','teble0')

开始你的任务吧,祝你成功!

解决

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import pymysql


# 连接mysql,连接数据库my_db,创建连接并返回连接对象
def connect():
    # 请在这里补充代码,完成本关任务,注意缩进格式为4个空格
    # ********* Begin ********* #
    conn = pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        db='my_db',
        passwd='123123',
        charset='utf8'
    )
    return conn
    # *********  End  ********* #


def test():
    # 创建连接,并且返回连接对象
    conn = connect()
    # 创建游标对象
    cursor = conn.cursor()
    # 请在这里补充代码,完成本关任务,注意缩进格式为4个空格
    # ********* Begin ********* #
    cursor.execute("select id, username, password from user ORDER BY id DESC;")
    result = cursor.fetchone()
    while result!=None:
        print(result)
        result = cursor.fetchone()
    # *********  End  ********* #
    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()