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

Python拆分脚本后,自定义模块无法调用mysql.connector问题求助

问题解决步骤

1. 修复NameError: name 'mysql' is not defined错误

每个Python模块都是独立的命名空间,主程序导入mysql.connector不会自动让login模块也能访问到这个库。你需要在login.py文件顶部显式导入mysql.connector:

import mysql.connector

def login():
    print('Entered login')
    cnx = mysql.connector.connect(user='', password='', host='', database='')
    print(f"{cnx.user} is connected to the {cnx.database}")
    return cnx  # 返回连接对象,方便其他模块复用

2. 实现数据库连接复用

如果要让多个模块共享同一个数据库连接,不要在每个模块里重复创建连接,推荐以下两种方式:

方式一:用单独的数据库连接模块

创建一个db_connection.py文件,专门管理数据库连接:

import mysql.connector

# 初始化全局连接对象
cnx = None

def get_db_connection():
    global cnx
    if not cnx or not cnx.is_connected():
        # 重新创建连接(处理连接断开的情况)
        cnx = mysql.connector.connect(user='', password='', host='', database='')
    return cnx

然后在login.py和其他需要数据库操作的模块里导入这个函数:

from db_connection import get_db_connection

def login():
    print('Entered login')
    cnx = get_db_connection()
    print(f"{cnx.user} is connected to the {cnx.database}")

所有模块共享同一个连接实例,避免重复创建连接消耗资源。

方式二:主程序统一管理连接

修改login函数返回连接对象,主程序保存后传递给其他需要的模块:

# login.py
import mysql.connector

def login():
    print('Entered login')
    cnx = mysql.connector.connect(user='', password='', host='', database='')
    print(f"{cnx.user} is connected to the {cnx.database}")
    return cnx

主程序中:

import tkinter as tk
import login

# 全局变量存储数据库连接
db_connection = None

def on_login_btn_click():
    global db_connection
    db_connection = login.login()
    # 后续可将db_connection传给其他模块的函数,比如:
    # other_module.execute_query(db_connection, "SELECT * FROM table")

root = tk.Tk()
login_btn = tk.Button(root, text="Login", command=on_login_btn_click)
login_btn.pack()
root.mainloop()

额外注意事项

  • 程序退出前记得调用cnx.close()关闭数据库连接,避免资源泄漏
  • 不要硬编码数据库账号密码,建议用配置文件或环境变量读取敏感信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:10:12