首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Python MySQL 查詢結果元組輸出亂碼:正確訪問字段值而非打印元組

     編輯:程式設計綜合問答

現象代碼

row = cursor.fetchone()
print(row)  # 輸出 (1L, u'南京崗灣公') → 這是元組調試輸出,非亂碼

根因

fetchone() 返回 元組,每個元素對應一個字段。直接 print(row) 打印元組的 repr 形式,Unicode 字符串顯示為 u'...',長整型顯示 1L(Python 2)。**這不是亂碼,是正常的調試輸出**。

正確訪問字段

# 方式 1:索引訪問
id = row[0]
name = row[1]
print(name)  # 輸出:南京崗灣公

# 方式 2:解包賦值
id, name = row
print(name)

# 方式 3:使用 DictCursor(推薦,字段名訪問)
import MySQLdb.cursors
conn = MySQLdb.connect(..., cursorclass=MySQLdb.cursors.DictCursor)
cursor = conn.cursor()
row = cursor.fetchone()
print(row['name'])  # 直接用字段名

編碼設置檢查清單

  1. 連接參數 charset='utf8'(或 utf8mb4 支援 Emoji)。
  2. 2. 數據庫/表/列字符集一致:SHOW VARIABLES LIKE 'character_set%'; 3. Python 2 環境:源文件頭部 # -*- coding: utf-8 -*-,字符串前綴 u'中文'。 4. 終端/IDE 控制台編碼為 UTF-8。

完整最佳實踐範本

import MySQLdb
import MySQLdb.cursors

conn = MySQLdb.connect(
    host='127.0.0.1', user='root', passwd='123',
    db='companyname', charset='utf8mb4',
    cursorclass=MySQLdb.cursors.DictCursor
)
try:
    with conn.cursor() as cursor:
        cursor.execute("SELECT id, name FROM users WHERE id=%s", (1,))
        row = cursor.fetchone()
        if row:
            print(f"ID: {row['id']}, Name: {row['name']}")
        else:
            print("無記錄")
finally:
    conn.close()

總結

「輸出亂碼」實為**元組調試輸出誤解**。使用 DictCursor + 字段名訪問 + 參數化查詢,代碼清晰、安全、無編碼困擾。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved