我的python代码正在尝试执行几个查询,这些查询将提取120万行,然后将该数据写入文件,但是当查询运行时,将花费近50分钟来完成任务。
40分钟后,它将引发异常:
ORA-02399:超出了最大连接时间,您已注销
我尝试关闭连接,但是没有用。
import cx_Oracle
query1 = "SELECT col1, col2 from Table"
query2 = "SELECT col1, col2, col3 from Table"
outputFile = "file1.txt"
outputFile = "file2.txt"
def run_query(query):
myfile = open(outputFile, 'w')
con = cx_Oracle.connect('username/password@db-string')
print "connected"
cur = con.cursor()
cur.execute(query)
for result in cur:
myfile.write(str(result) + "\n")
print "Writing done"
con.close()
run_query(query1, file1)
run_query(query2, file2)
答案 0 :(得分:0)
我认为最好将所有结果都复制到csv文件中。
rows = cur.fetchall()
fp = open('/tmp/file1.csv', 'w')
myFile = csv.writer(fp)
myFile.writerows(rows)
fp.close()
for循环的时间复杂度为O(log^2(n))
。因此,只需考虑需要花费120万个数据。在处理大量数据时,尽量避免for循环。这是一个例子。