Python:Connector/Python 怎樣查詢數據庫和獲取數據

最近更新時間 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
    ))
rss_feed