需要以下任务的帮助:
我想从Oracle服务器(oracle 11g数据库)下载20GB的数据集/数据转储到我的本地磁盘驱动器(即E:/ python /)。我想用Python 3.4(windows64位;我正在使用Anaconda - spyder IDE)实现这一目标
我使用以下查询正常使用SAS:
LIBNAME ORACLE ODBC DSN= oracle UID= user PWD= password; #CONNECTION TO SERVER
LIBNAME LOCAL "E:/PYTHON"; #SETTING LOACAL PATH FOR DATA STORE
CREATE TABLE LOCAL.MYnewTable AS
SELECT * FROM ORACLE.DOWLOAD_TABLE
;QUIT;
以上查询将使用SAS从服务器下载20GB的datadump到我的本地E:/驱动器。如何在Python中做同样的事情?我的RAM只有4GB,所以在Pandas的数据框中下载整个20gb数据集会占用RAM(我相信!!我可能错了)。 SAS非常容易完成这项任务。请建议Python的查询。请求大家分享代码。
谢谢!
答案 0 :(得分:0)
奥基!所以已经解决了我自己的问题:这也可以使用cxOracle来完成,但我使用的是Python 3.5,显然cxOracle for python 3.5不可用(据我所知)这就是为什么我使用了" pyodbc& #34;封装
import csv
import pyodbc
conn = pyodbc.connect('''DRIVER=<<name of server connection in ODBC driver>>;
SERVER= <<server IP>> i.e.: <<00.00.00.00>>;
PORT= <<5000>>;
DATABASE=<<Server database name>>;
UID= <<xyz>>;
PWD= <<****>>;''')
# needs to be at the top of your module
def ResultIter(cursor, arraysize=1000):
'An iterator that uses fetchmany to keep memory usage down'
while True:
results = cursor.fetchmany(arraysize)
if not results:
break
for result in results:
yield result
# where con is a DB-API 2.0 database connection object
cursor = conn.cursor()
cursor.execute('select * from <<table_name>>')
csvFile = open('stored_data_fetched_file.csv', 'a')
csvWriter = csv.writer(csvFile)
for result in ResultIter(cursor):
csvWriter.writerow(result)
csvFile.close()
这也可以用于Netezza连接。已经过试用和测试。