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

2024-06-01 04:14:15 发布

您现在位置:Python中文网/ 问答频道 /正文

需要以下任务的帮助:

我想从Oracle服务器(Oracle11g数据库)下载20gb的数据集/数据转储到本地磁盘驱动器(即:/python/)。我想用Python3.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:/drive。如何在Python中执行相同的操作??我的内存只有4gb,所以在熊猫的数据框中下载整个20gb的数据集会消耗掉内存(我相信!!我可能错了)。SAS很容易完成这项任务。请建议查询Python。请大家分享密码。

谢谢!!


Tags: 数据内存服务器数据库localtableanacondaoracle
1条回答
网友
1楼 · 发布于 2024-06-01 04:14:15

好吧!所以我找到了我自己的问题的解决方案:这也可以用cxOracle实现,但我使用的是python3.5,显然cxsoracle for python3.5不可用(据我所知),这就是我使用“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连接。已经试过了。在

相关问题 更多 >