Python - 使用 Python 从 Oracle / Netezza 服务器下载 20 GB dataset/datadump 到我的本地磁盘驱动器

Python - Download a 20 gb of dataset/datadump from Oracle / Netezza server to my local disk drive using Python

需要以下任务的帮助:

我想从 Oracle 服务器(oracle 11g 数据库)下载 20gb 的 dataset/datadump 到我的本地磁盘驱动器(即 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 的数据转储到我的本地 E:/ 驱动器。如何在 Python 中做同样的事情?我的 RAM 只有 4gb,所以在 Pandas' 数据框中下载整个 20gb 数据集会耗尽 RAM(我相信!!我可能是错的)。 SAS 很容易完成这项任务。请建议 Python 的查询。求大家分享代码。

谢谢!!

好的!所以已经解决了我自己的问题:这也可以使用 cxOracle 完成,但我使用的是 Python 3.5,显然 python 3.5 的 cxOracle 不可用(据我所知),这就是为什么我用过 "pyodbc" 套餐

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 连接。已尝试和测试。