MySQL Connector/Python 开发人员指南  /  Connector/Python 代码示例  /  使用 Connector/Python 查询数据

5.4 使用 Connector/Python 查询数据

以下示例展示了如何使用通过连接的 cursor() 方法创建的游标来 查询 数据。返回的数据将被格式化并打印到控制台。

任务是选择所有在 1999 年雇用的员工,并将他们的姓名和雇用日期打印到控制台。

import datetime
import mysql.connector

cnx = mysql.connector.connect(user='scott', database='employees')
cursor = cnx.cursor()

query = ("SELECT first_name, last_name, hire_date FROM employees "
         "WHERE hire_date BETWEEN %s AND %s")

hire_start = datetime.date(1999, 1, 1)
hire_end = datetime.date(1999, 12, 31)

cursor.execute(query, (hire_start, hire_end))

for (first_name, last_name, hire_date) in cursor:
  print("{}, {} was hired on {:%d %b %Y}".format(
    last_name, first_name, hire_date))

cursor.close()
cnx.close()

我们首先打开与 MySQL 服务器的连接,并将 连接对象 存储在变量 cnx 中。然后,我们使用连接的 cursor() 方法创建一个新的游标,默认情况下是 MySQLCursor 对象。

在上面的示例中,我们将 SELECT 语句存储在变量 query 中。请注意,我们在日期应该出现的地方使用了未加引号的 %s 占位符。Connector/Python 将 hire_starthire_end 从 Python 类型转换为 MySQL 能够理解的数据类型,并添加必要的引号。在本例中,它将第一个 %s 替换为 '1999-01-01',将第二个替换为 '1999-12-31'

然后,我们使用 execute() 方法执行存储在 query 变量中的操作。用于替换查询中 %s 占位符的数据作为元组传递:(hire_start, hire_end)

执行查询后,MySQL 服务器已准备好发送数据。结果集可能是零行、一行或一亿行。根据预期的数据量,可以使用不同的技术来处理此结果集。在本例中,我们将 cursor 对象用作迭代器。行的第一列存储在变量 first_name 中,第二列存储在 last_name 中,第三列存储在 hire_date 中。

我们打印结果,使用 Python 的内置 format() 函数格式化输出。请注意,hire_date 被 Connector/Python 自动转换为 Python datetime.date 对象。这意味着我们可以轻松地将日期格式化为更易于阅读的形式。

输出应该类似于以下内容

..
Wilharm, LiMin was hired on 16 Dec 1999
Wielonsky, Lalit was hired on 16 Dec 1999
Kamble, Dannz was hired on 18 Dec 1999
DuBourdieux, Zhongwei was hired on 19 Dec 1999
Fujisawa, Rosita was hired on 20 Dec 1999
..