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']) # 直接用字段名
charset='utf8'(或 utf8mb4 支援 Emoji)。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 + 字段名訪問 + 參數化查詢,代碼清晰、安全、無編碼困擾。