You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python代码报错NameError: name 'mydb' is not defined求助

解决NameError: name 'mydb' is not defined问题

问题根源

  • mydb是connect()函数内部的局部变量,函数外部无法直接访问。
  • 你没有调用connect()函数,就算把mydb设为全局变量,也不会被初始化。

解决方案1:让函数返回连接对象(推荐)

这种方式更符合代码规范,避免全局变量带来的维护问题:

import mysql.connector

def connect():
    try:
        mydb = mysql.connector.connect(
            host='localhost',
            user='root',
            password='12345',
            database="Food"
        )
        return mydb  # 返回数据库连接对象
    except mysql.connector.Error as e:
        print(f"连接失败: {e}")
        return None  # 连接失败返回None

# 调用函数获取连接
mydb = connect()
if mydb:  # 确认连接成功后再创建游标
    mycursor = mydb.cursor()

解决方案2:正确使用全局变量(不推荐)

如果一定要用全局变量,需要在函数内声明并调用函数初始化:

import mysql.connector

# 先在全局作用域声明变量
mydb = None

def connect():
    global mydb  # 声明使用全局变量
    try:
        mydb = mysql.connector.connect(
            host='localhost',
            user='root',
            password='12345',
            database="Food"
        )
    except mysql.connector.Error as e:
        print(f"连接失败: {e}")

# 必须调用函数初始化全局变量
connect()
if mydb:
    mycursor = mydb.cursor()

额外提示

  • 不要使用空except语句,捕获具体的异常类型(比如mysql.connector.Error)并打印异常信息,能更精准排查问题。
  • 无论哪种方案,都必须调用connect()函数,否则数据库连接对象不会被创建。

内容的提问来源于stack exchange,提问作者frky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:41:02