使用Python MySQL Connector执行SQL始终返回None问题求助
解决Python MySQL Connector查询返回None的问题
你遇到的问题是因为cursor.execute()方法本身不会返回查询结果,它的返回值固定为None。要获取查询结果,必须在执行语句后调用游标对应的结果获取方法。
正确的代码示例
1. 查询表列表(SHOW TABLES)
修改你的代码,执行execute()后用fetchall()获取所有结果:
import os from os.path import join, dirname import mysql.connector from dotenv import load_dotenv dotenv_path = join(dirname(__file__), 'usersSQL.env') load_dotenv(dotenv_path) DB_HOST = os.environ.get("DB_HOST") DB_USER = os.environ.get("DB_USER") DB_PASSWORD = os.environ.get("DB_PASSWORD") DB_NAME = os.environ.get("DB_NAME") usersDB = mysql.connector.connect( host=DB_HOST, user=DB_USER, password=DB_PASSWORD, database=DB_NAME ) cursor = usersDB.cursor() # 执行查询 cursor.execute("SHOW TABLES") # 获取所有结果 tables = cursor.fetchall() # 打印结果 for table in tables: print(table[0]) # 每个结果是元组,取第一个元素就是表名 # 关闭游标和连接 cursor.close() usersDB.close()
2. 查询users表数据(SELECT * FROM users)
如果要查询表内数据,同样用结果获取方法:
cursor.execute("SELECT * FROM users") users_data = cursor.fetchall() for user in users_data: print(user) # 打印每条用户数据
3. 创建表后的验证
如果是执行建表语句,execute()同样返回None,你可以通过再次执行SHOW TABLES或者查询表结构来验证是否创建成功:
# 执行建表语句 cursor.execute(""" CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL UNIQUE ) """) # 提交事务(DDL语句在MySQL中默认自动提交,但显式提交更稳妥) usersDB.commit() # 验证表是否存在 cursor.execute("SHOW TABLES LIKE 'users'") result = cursor.fetchone() if result: print("users表已存在/创建成功") else: print("users表创建失败")
关键说明
cursor.execute():负责执行SQL语句,返回值始终为None,仅表示语句执行完成(无语法错误等)。- 结果获取方法:
fetchall():获取所有查询结果,返回列表形式,每个元素是对应行的元组。fetchone():获取下一行结果,返回单个元组,无结果时返回None。fetchmany(size=N):获取指定数量的结果,返回列表形式。
- 对于写操作(INSERT、UPDATE、DELETE、CREATE TABLE等),需要调用
usersDB.commit()来提交事务,否则修改不会生效。
内容的提问来源于stack exchange,提问作者user23472212
相关产品推荐
相关产品推荐

