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

Python操作MySQL遇NameError: mydb未定义,求报错原因解析

问题分析与解决

报错原因

当mysql.connector.connect()抛出ProgrammingError异常时,try块里的mydb变量根本没完成赋值——因为数据库连接操作失败,代码直接跳去except块打印信息,这时候mydb在当前作用域里完全不存在。后面执行mycursor = mydb.cursor(),自然会触发NameError。

简单说:只有连接成功时mydb才会被定义,连接失败触发异常的话,mydb从始至终都没被创建出来。

修复方案

你需要保证mydb在任何情况下都有合法定义,或者只在连接成功后才执行游标相关操作,这里给两种实用的修复方式:

方式1:捕获异常后创建数据库并重新连接

既然捕获的是数据库不存在的错误,直接在异常处理里创建数据库,再重新建立连接:

import mysql.connector

mydb = None
try:
    mydb = mysql.connector.connect(
        host="localhost",
        user="root",
        password="",
        database="siteDB",
    )
except mysql.connector.errors.ProgrammingError:
    print('DB crée')
    # 先连接到MySQL服务(不指定具体数据库)
    temp_conn = mysql.connector.connect(
        host="localhost",
        user="root",
        password=""
    )
    temp_cursor = temp_conn.cursor()
    temp_cursor.execute("CREATE DATABASE siteDB")
    temp_conn.close()
    # 重新连接到刚创建的siteDB
    mydb = mysql.connector.connect(
        host="localhost",
        user="root",
        password="",
        database="siteDB",
    )
# 确认mydb有效后再创建游标
if mydb:
    mycursor = mydb.cursor()

方式2:把游标操作放到try块内部

如果只有连接成功时才需要执行后续数据库操作,直接把游标创建逻辑移到try块里:

import mysql.connector

try:
    mydb = mysql.connector.connect(
        host="localhost",
        user="root",
        password="",
        database="siteDB",
    )
    mycursor = mydb.cursor()
    # 所有数据库操作都放在这个try块里
except mysql.connector.errors.ProgrammingError:
    print('DB crée')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:11:11