python-3.x - 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))
如果手动运行,我可以提取数据。请帮忙。谢谢。
解决方案
我发现了错误!问题出在 data.py 中。在data_box_extract的参数列表中,connection拼写为“connection”。在函数内部,正在使用“连接”,因此无法实例化游标。不知道为什么它没有抛出关于“连接”没有被实例化的错误。哦,好吧,我正在 IDLE 中编写程序,也许是时候切换到能够捕捉这些错误的 IDE 了……感谢所有观看的人!
推荐阅读
- haskell - Haskell 变量不在范围内
- python - 将数据框中的每一行除以 Python 中的向量
- javascript - 如何只打开特定的模态窗口?
- python - 如何在 python 执行的 sql 语句中使用 hex(x ' ' )?
- javascript - 将代码移动到函数中时,React-leaflet LayersControl 引发错误
- vue.js - 选择单选按钮时,Vue组件不呈现条件内容
- c# - CodedUITest 前端交互使用另一个本地用户(模拟)
- javascript - 为文档生成自定义 dgeni 管道
- javascript - 统计动态行数并在html的输入框中显示
- c# - 需要精确到小数点后 3 位