使用python和oracle db在文件中获取、隔离和写入相应数据的最快方法

使用python和oracle db在文件中获取、隔离和写入相应数据的最快方法,python,python-3.x,database,oracle,file,Python,Python 3.x,Database,Oracle,File,我一直在尝试从数据库中获取大量数据,只是为了对其进行解析和隔离,并使用python将其写入csv文件。数据非常庞大,因此我决定将其转储到一个临时文件中,在该文件中隔离数据并创建多个csv文件(我认为处理如此多的数据对python来说会很累,这就是转储的原因)。现在,只有将数据写入这个临时文件超过了时间限制,我甚至不能从隔离部分开始。我是这里的初学者,请给我建议正确的方法。 我也可以尝试在抓取后立即分离,然后直接将其写入CSV,因此如果对此有一些建议,它可能对我很有用 大部分时间都花在将数据写入文

我一直在尝试从数据库中获取大量数据,只是为了对其进行解析和隔离,并使用python将其写入csv文件。数据非常庞大,因此我决定将其转储到一个临时文件中,在该文件中隔离数据并创建多个csv文件(我认为处理如此多的数据对python来说会很累,这就是转储的原因)。现在,只有将数据写入这个临时文件超过了时间限制,我甚至不能从隔离部分开始。我是这里的初学者,请给我建议正确的方法。 我也可以尝试在抓取后立即分离,然后直接将其写入CSV,因此如果对此有一些建议,它可能对我很有用 大部分时间都花在将数据写入文件上
编辑-所以我所说的隔离是指我必须根据每一条记录获取的一列的值来隔离每一条记录

cur = con.cursor()
file = open("Data_for_2_Days.text","w+")

print("Starting execution of query")
currentTime = datetime.datetime.now()
print("timestamp at the start of execution of query =  ")
print(currentTime)

result  = cur.execute(query)

print("query executed")
currentTime = datetime.datetime.now()
print("time after execution =  ")
print(currentTime)

print("beginning to write")
currentTime = datetime.datetime.now()

for item in result:
    file.write(str(item))

print("finished writing")
currentTime = datetime.datetime.now()
print("time after writing =  ")
print(currentTime)
file.close

首先,您知道大部分时间都花在哪里:执行查询、获取数据或写入文件?如果正在提取数据,请尝试设置光标的阵列大小,例如:

cur.arraysize=1000
这将提高获取时间。
话虽如此,我不确定这是否是实现你所说的目标的最佳方式。隔离的确切含义是什么?

如果您将数据读取到pandas数据帧,则使用获取列的唯一值,并使用保存到csv文件

df  = #read the data to a dataframe named df
cities
作为列的名称

for city in df['cities'].unique():
    df[df['cities'] == city].to_csv('/path_to_folder/{}.csv'.format(city), index=False)

为什么必须保存到临时文件,为什么不能将数据从
结果
中分离到csv文件。如果您正在处理表,还可以查看
Pandas
库。您可以建议我一种快速方法,根据列的值分隔每个记录,并根据该值将数据放置在不同的csv文件中。事实上,获取的数据是有序的,即使我只是观察到该列的值发生了变化,我也可以将其放入不同的文件中,基于此,每个变化的值都是唯一的吗?也就是说,当你观察到该列的值发生变化时,它是否每次都会变为一个新的值?不,让我这么说吧,我应该是在处理一个数据库,该数据库包含一个国家所有个人的记录。现在我必须根据他们所在的城市进行隔离,每个城市都将创建一个新文件。唯一的区别是,只有10个城市,将要获取的数据将是有序的,因此-假设我观察到从纽约市到洛杉矶的变化,我知道下一批数据将是洛杉矶的,纽约已经完成,纽约将不会再有了。大部分时间都花在将数据写入文件上。因此,我所说的隔离是指我必须根据每个记录所获取的一列的值来隔离每个记录。如果如你所说,大部分时间都花在写文件上,然后,最好让相同的代码获取数据的一部分(使用where子句中的一些谓词),启动该过程的几个实例,每个实例都将其部分写入不同的文件。也就是说,如果您的I/O子系统允许更大的带宽,请执行此操作。