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 连接。已尝试和测试。
需要以下任务的帮助:
我想从 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 连接。已尝试和测试。