• 【已解决】Python读取sql数据,报错:Not an executable object,解决方案


    【已解决】Python读取sql数据,报错:Not an executable object,解决方案

    1.报错内容:

    通过Python连接sql,读取sql中数据,报错:Not an executable object。具体代码及报错内容见下:

    def employee():
        employee_id = []
        try:
            engine = sql_cn.connect_sql_ob_10200("prod")
            
            with engine.connect() as conn:
                # 获取实验组专家
                sql = '''SELECT employee_account_id FROM employee_group where employee_group ='B' '''
                result = conn.execute(sql)
                for row in result:
                    employee_id.append(row[0])
        except Exception as e:
            logger.error(f"获取专家ID出现问题:{e}")
            
        logger.info(f"专家获取完成, 共:{len(employee_id)}")
        return employee_id
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    报错内容:
    在这里插入图片描述

    Not an executable object: "SELECT employee_account_id FROM employee_group where employee_group ='B' "

    2.报错原因:

    • 当前执行语句不是一个可执行对象,主要是由于sqlalchemy版本不同造成的。sqlalchemy中1.4和2.0两种不同的语法。(如果版本可以回退,直接回退就可以解决)

    3.解决方案:

    方案一:回退版本。

    • sqlalchemy的1.4和2.0两种不同的语法,pandas暂时还不支持2.0,所以将sqlalchemy回退到1.4.45即可。
    pip3 uninstall SQLAlchemy
    
    pip3 install SQLAlchemy==1.4.45
    
    • 1
    • 2
    • 3

    方案二:如果不可以回退,通过导入其他包解决:

    # 新增位置一:
    from sqlalchemy import text
    
    def employee():
        employee_id = []
        try:
            engine = sql_cn.connect_sql_ob_10200("prod")
            
            with engine.connect() as conn:
                # 获取实验组专家
                sql = '''SELECT employee_account_id FROM employee_group where employee_group ='B' '''
                # 修改位置二:
                result = conn.execute(text(sql))
                for row in result:
                    employee_id.append(row[0])
        except Exception as e:
            logger.error(f"获取专家ID出现问题:{e}")
            
        logger.info(f"专家获取完成, 共:{len(employee_id)}")
        return employee_id
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    附:pd.read_sql_query() 报错:‘OptionEngine’ object has no attribute ‘execute’ 解决方案

    • 该问题和前面基本原因是一样的,只要修改连接方式,则可解决:

    报错代码:

    def get_index_data():
        engine = sql_cn.connect_sql_ob_10200("prod")
        sql = "select * from da_defeat_act.label_customer_index"
    
        index_data = pd.read_sql_query(sql, engine)
        
        return index_data
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    报错内容:
    在这里插入图片描述

    修改后代码:

    def get_index_data():
        engine = sql_cn.connect_sql_ob_10200("prod")
        # 新增位置一
        connection = engine.connect()
        sql = "select * from da_defeat_act.label_customer_index"
    		
    		# 修改位置二:
        index_data = pd.read_sql_query(text(sql), connection)
        
        return index_data
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    以上问题,如果可以回退版本号,推荐回退版本号,这样效率更高。

  • 相关阅读:
    linux安装edge时出现dpkg依赖问题
    222页8万字智慧园区IOC平台运维管理平台解决方案
    [23年毕业设计源码]精品基于Python实现的仓库库存管理系统[2023届新项目源码]
    重磅!TikTok Shop将以新方式重启印尼业务
    《算法导论》学习(十七)----动态规划之钢条切割(C语言)
    封装一个自己的前端脚手架cli工具(二)
    Android Audio实战——静音设置(十八)
    B_QuRT_User_Guide(27)
    【算法作业】实验四:逆波兰表达式求值 & Fibonacci数列的尾递归与非递归程序
    人工智能绘画软件:突破艺术的边界(大招在后面)
  • 原文地址:https://blog.csdn.net/weixin_39471848/article/details/133674741