Python:Connector/Python 怎样查询数据库和获取数据

Lasted 2020-12-01 10:37:57

本篇文章主要介绍怎样使用 Connector/Python 的 cursor() 方法查询获取数据,以及读取格式化返回的结果集。

使用 MySQLCursor 对象

按条件查询数据库,查询登录时间在 2019 年的所有数据并返回名称、登录时间等信息。

import datetime
import mysql.connector

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

query = ("SELECT name, login_date FROM login "
         "WHERE login_date BETWEEN %s AND %s")

login_start = datetime.date(2019, 1, 1)
login_end = datetime.date(2019, 12, 31)

cursor.execute(query, (login_start, login_end))

for (name, login_date) in cursor:
  print("{} login {:%d %b %Y}".format(
    name, login_date))

cursor.close()
cnx.close()

通过 connect() 方法连接 MySQL 数据库,获取 conneciton 对象赋值给 cnx。调用 cnx 的 cursor() 方法获取一个 MySQLCursor 对象。

执行 MySQLCursor 对象的 execute() 方法后,结果集会保存在 cursor 变量中,通过遍历 cursor 获取返回的数据。

使用 MySQLCursorRaw 对象

设置为 MySQLCursorRaw 后,cursor 不会自动把 MySQL 数据类型自动转换为 Python 类型,使用这种对象一般是为了获取更好的性能,获取结果后自己进行数据转换。

import mysql.connector

cnx = mysql.connector.connect()

# Only this particular cursor will be raw
cursor = cnx.cursor(raw=True)

# All cursors created from cnx2 will be raw by default
cnx2 = mysql.connector.connect(raw=True)

使用 MySQLCursorDict 对象

MySQLCursorDict 类继承 MySQLCursor。在 Connector/Python 2.0.0 以后支持。

MySQLCursorDict 会处理结果集为字典对象,列名为字典的 Key 值,通过列名直接获取数据。

cnx = mysql.connector.connect(database='world')
cursor = cnx.cursor(dictionary=True)
cursor.execute("SELECT * FROM country WHERE Continent = 'Europe'")

print("Countries in Europe:")
for row in cursor:
    print("* {Name}".format(Name=row['Name']

可使用 format() 方法格式化数据。

cursor.execute("SELECT Name, Population FROM country WHERE Continent = 'Europe'")

print("Countries in Europe with population:")
for row in cursor:
    print("* {Name}: {Population}".format(**row))

使用 MySQLCursorNamedTuple 对象

MySQLCursorNamedTuple 类继承 MySQLCursor。在 Connector/Python 2.0.0 以后支持。

MySQLCursorNamedTuple 会处理结果集为 tuple。named-tuple 为 SQL 语句的列名称。

cnx = mysql.connector.connect(database='world')
cursor = cnx.cursor(named_tuple=True)
cursor.execute("SELECT * FROM country WHERE Continent = 'Europe'")

print("Countries in Europe with population:")
for row in cursor:
    print("* {Name}: {Population}".format(
        Name=row.Name,
        Population=row.Population
    ))