python cx_oracle在存储为数据帧时挂起?
我试图将Oracle SQL查询的结果存储到一个数据帧中,执行会无限挂起。但是,当我打印查询时,它会立即显示出来。将此保存为数据帧时,是什么导致错误python cx_oracle在存储为数据帧时挂起?,python,oracle,pandas,Python,Oracle,Pandas,我试图将Oracle SQL查询的结果存储到一个数据帧中,执行会无限挂起。但是,当我打印查询时,它会立即显示出来。将此保存为数据帧时,是什么导致错误 import cx_Oracle import pandas as pd dsn_tns = cx_Oracle.makedsn('HOST', 'PORT', service_name='SID') conn = cx_Oracle.connect(user='USER', password='PASSWORD', dsn=dsn_tns) cu
import cx_Oracle
import pandas as pd
dsn_tns = cx_Oracle.makedsn('HOST', 'PORT', service_name='SID')
conn = cx_Oracle.connect(user='USER', password='PASSWORD', dsn=dsn_tns)
curr =conn.cursor()
curr.execute('alter session set current_schema= apps')
df = pd.read_sql('select * from TABLE', curr)
####THE ALTERNATIVE CODE TO PRINT THE RESULTS
# curr.execute('select * from TABLE')
# for line in curr:
# print(line)
curr.close()
conn.close()
Pandas的con参数需要一个连接对象,而不是游标的execute
结果。此外,考虑使用大熊猫和数据库之间的推荐接口,在其中定义引擎连接分配中的模式。此引擎还允许调用
正如上面提到的,在Oracle中,用户和模式本质上是相同的(与其他RBDM不同)。因此,请尝试在create\u engine
call中以用户身份传递应用程序,并提供所需的凭据:
engine = create_engine("oracle+cx_oracle://apps:PASSWORD@HOST:PORT/SID")
df = pd.read_sql('select * from TABLE', con=engine)
engine.dispose()
engine = create_engine("oracle+cx_oracle://apps:PASSWORD@HOST:PORT/SID")
df = pd.read_sql('select * from TABLE', con=engine)
engine.dispose()