首页 > 解决方案 > Pandas 0.25.0 无法为 read_sql 创建游标 - 抛出错误

问题描述

我不断收到 Pandas 的 0.25.0 read_sql() 错误。下面的代码应该建立一对连接,检查是否需要创建表,然后开始从 Oracle 中提取结果集。

堆栈跟踪

RESTART: C:\xxxx\xxxx\AppData\Local\Programs\Python\Python36\xxxx\main.py 
Creating connections
Attempting to connect
Connection to box_db Successful
Attempting to connect
Connection to JDE Successful
Box table already existed
BoxStaging table already existed
LotStartSiteMap table already existed
Extracting from JDE
Traceback (most recent call last):
 File "C:\xxxx\xxxx\AppData\Local\Programs\Python\Python36\xxxx\main.py", line 42, in <module>
   main()
 File "C:\xxxx\xxxx\AppData\Local\Programs\Python\Python36\xxxx\main.py", line 26, in main
   df = data.box_data_extract(queries.BOX_QUERY, jde_conn)
 File "C:\xxxx\xxxx\AppData\Local\Programs\Python\Python36\xxxx\data.py", line 46, in box_data_extract
   pd.read_sql_query(query, connection)
 File "C:\xxxx\xxxx\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\io\sql.py", line 332, in read_sql_query
   chunksize=chunksize,
 File "C:\xxxx\xxxx\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\io\sql.py", line 1645, in read_query
   cursor = self.execute(*args)
 File "C:\xxxx\xxxx\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\io\sql.py", line 1590, in execute
   cur = self.con.cursor()
AttributeError: module 'connection' has no attribute 'cursor'

主文件

import connection
import credential
import data
import emailer
import queries
import tables

def main():

    # Create connection to box_db file and JDE
    #
    print("Creating connections")
    sqlite_conn = connection.box_db_connect(tables.DB_PATH)
    jde_conn = connection.mrap0680_connect(credential.USERNAME, credential.MRAP0680_PASSWORD)

    # If new path has been chosen create sqlite db and tables accordingly
    #
    tables.create_box_table(sqlite_conn)
    tables.create_box_staging_table(sqlite_conn)
    tables.create_lot_startsite_map_table(sqlite_conn)

    # Extract & insert JDE Box Query results into BoxStaging table
    #
    print("Extracting from JDE")
    df = data.box_data_extract(queries.BOX_QUERY, jde_conn) #############LINE CAUSING ERROR
    print("Storing in box_db")
    data.box_data_insert(df, sqlite_conn)
    print("BoxStaging updated")

数据.py

# Extract the box data from JDE
#
def box_data_extract(query, connnection):
    try:
        df = pd.read_sql(query, con=connection)
        print("JDE Box Data extracted")
        return df
    except Exception as e:
        print(repr(e))

连接.py

def xxxx_connect(username, password):
    # Connect to JDE database
    try:
        print("Attempting to connect")
        conn = cx_Oracle.connect(user=username, password=password, dsn=DSN_TNS)
        print("Connection to JDE Successful")
        return conn

    except Exception as e:
        print(repr(e))

如果手动运行,我可以提取数据。请帮忙。谢谢。

标签: python-3.xpandas

解决方案


我发现了错误!问题出在 data.py 中。在data_box_extract的参数列表中,connection拼写为“connection”。在函数内部,正在使用“连接”,因此无法实例化游标。不知道为什么它没有抛出关于“连接”没有被实例化的错误。哦,好吧,我正在 IDLE 中编写程序,也许是时候切换到能够捕捉这些错误的 IDE 了……感谢所有观看的人!


推荐阅读