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

Python使用mysql.connector连接MySQL时无报错却执行停滞

Python使用mysql.connector连接MySQL时无报错却执行停滞

看起来你的代码卡在了建立MySQL连接的那一步——毕竟你只看到了k,后面的g根本没输出,而且没有任何报错提示,这种情况多半是连接环节出了问题,要么是MySQL服务器没正常跑,要么是连接参数/认证方式不兼容导致连接阻塞了。

我给你梳理几个排查和解决的方向:

  • 先确认MySQL本地服务是否在运行
    你先检查下本地的MySQL服务器是不是真的启动了:Windows可以去「服务」列表里找MySQL服务看状态;Linux/macOS可以在终端敲systemctl status mysql(或者mysql.server status)确认。如果服务没开,先启动它再试代码。

  • 检查MySQL用户认证方式(针对MySQL 8.0+版本)
    MySQL 8.0及以上版本默认用caching_sha2_password作为认证插件,而mysql.connector在某些环境下和这个插件的兼容性不太好,会导致连接卡住没反应。你可以把root用户的认证方式改成老的mysql_native_password试试:

    1. 打开终端登录MySQL命令行:mysql -u root -p,然后输入你的密码manager
    2. 执行修改命令:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'manager';
    3. 刷新权限:FLUSH PRIVILEGES;
      改完之后再运行你的Python代码,大概率能解决连接卡住的问题。
  • 给连接环节加上超时和异常捕获,明确问题
    你现在的代码在连接数据库时没有任何异常处理,所以卡住了也不知道具体原因。可以给connect方法加上超时参数,同时把连接代码包在try-except里,这样能直接看到连接时的错误:

    def appen():
        print('k')
        try:
            mysq = mysql.connector.connect(user='root', passwd='manager', host='localhost', database='krishna', connect_timeout=10)
            print('g')
        except Exception as e:
            print(f"连接数据库出错了: {e}")
            return
        # 后面的代码保持不变...
    

    这样如果连接超时或者有其他错误,会直接打印出来,你就能精准定位问题了。

  • 顺便提个代码优化点:别用f-string拼SQL语句
    你现在用f-string拼接insert语句,不仅有SQL注入的风险,要是输入的内容里有单引号(比如名字叫O'Neil),直接就会导致SQL语法错误。换成参数化查询更安全也更稳定:

    cur.execute(
        "insert into employee values(%s, %s, %s, %s, %s, %s, %s, %s);",
        (eno, enm, job, mgr, hd, sal, cm, dn)
    )
    

    这样mysql.connector会自动处理字符串的引号和转义,不用你手动加单引号啦。

备注:内容来源于stack exchange,提问作者krishi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 08:39:33