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

Python跨文件调用MySQL连接查询数据出现AttributeError报错如何解决

错误产生原因
  • con()函数没有返回合法的数据库连接对象:连接成功分支没有写return语句,默认返回None;连接失败分支返回0,也不属于pd.read_sql()支持的连接类型。pd.read_sql()接收到None后,内部尝试调用.cursor()方法执行查询,自然会抛出NoneType无cursor属性的错误。
  • read_datasets.py中调用连接函数的写法错误:代码中写的是con(直接传递函数对象本身),没有加括号执行函数获取返回值,pd.read_sql()接收到函数对象后同样无法调用.cursor()方法。
修复方案

第一步:修改main.py中的con函数

调整函数逻辑,成功时返回连接对象,失败时抛出明确错误,不需要在函数内创建游标(pd.read_sql会自动处理游标逻辑):

import mysql.connector
import pandas as pd

def con():
    try:
        # 声明MySQL默认配置
        connection = mysql.connector.connect(
            host="xx",
            user="xx",
            passwd="xx",
            db="xx",
        )
        print("connected")
        # 成功时返回连接对象
        return connection
    # 连接失败处理
    except Exception as e:
        print(f"cant connect to database: {str(e)}")
        # 失败时抛出异常方便排查问题
        raise

if __name__ == '__main__':
    print("actually in main.py")
    # 连接MySQL查询数据
    temp1 = pd.read_sql("SELECT xx FROM xx", con() )
    # 过滤DataFrame中的空值
    temp1 = temp1.dropna()

第二步:修改read_datasets.py中的调用写法

执行con函数获取连接对象,再传给pd.read_sql:

import pandas as pd
from main import con

# 调用con函数加括号获取返回的连接对象
temp1 = pd.read_sql("SELECT xx FROM xx", con())
# 过滤DataFrame中的空值
temp1 = temp1.dropna()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 18:57:00