6.5.4 使用连接器/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。 然后我们使用连接的 方法 创建一个新游标,默认情况下是一个 MySQLCursor对象。cursor()

在前面的示例中,我们将SELECT 语句存储在变量中query。请注意,我们%s在日期应该出现的地方使用了不带引号的标记。hire_start连接器 /Python 将hire_endPython 类型转换为 MySQL 可以理解的数据类型并添加所需的引号。在这种情况下,它将第一个替换为%s'1999-01-01'将第二个 替换为'1999-12-31'

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

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

我们打印结果,使用 Python 的内置 format()函数格式化输出。请注意,它 hire_date已由连接器/Python 自动转换为 Pythondatetime.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
..