我有一个脚本,它从csv文件中解析信息并执行SQL语句来创建一个表并插入数据。我必须解析一个约25gb的csv文件,但是根据我当前的脚本,我估计从之前解析过的大小的文件来看,这可能需要20天的时间。关于如何优化我的脚本以使它运行得更快有什么建议?我忽略了createtable函数,因为它只调用了一次。InsertRow()是我认为我需要做得更快的函数。提前谢谢。在
#Builds sql insert statements and executes sqlite3 calls to insert the rows
def insertRow(cols):
first = True; #First value for INSERT arguments doesn't need comma front of it.
conn = sqlite3.connect('parsed_csv.sqlite')
c = conn.cursor()
print cols
insert = "INSERT INTO test9 VALUES("
for col in cols:
col = col.replace("'", "")
if(first):
insert += "'" + col + "'"
first = False;
else:
insert += "," + "'" + col+ "'" + " "
insert += ")"
print (insert)
c.execute(insert)
conn.commit()
def main():
#Get rid of first argument (filename)
cmdargs = sys.argv[1:]
#Convert values to integers
cmdargs = list(map(int, cmdargs))
#Get headers
with open(r'requests_fields.csv','rb') as source:
rdr = csv.reader(source)
for row in rdr:
createTable(row[:], cmdargs[:])
with open(r'test.csv','rb') as source:
rdr= csv.reader( source )
for row in rdr:
#Clear contents of list
outlist =[]
#Append all rows onto list and then write to row in output csv file
for index in cmdargs:
outlist.append(row[index])
insertRow(outlist[:])
我可能会因为每次与insertm()的连接速度过慢而影响到数据库的创建速度?在
1)Python,SQLLite,25 GB。Fastspeed=太棒了。在
2)insert=“insert INTO test9 VALUES(”—错误的解决方案。好的风格是using parameters:
连接到数据库并为每一行创建一个游标。如果你把这一步移出循环,它会快得多。在
你也要在每一次争吵后提交。如果它符合您的应用程序的逻辑,我建议您也尝试降低这种情况的发生频率,尽管在另一个极端情况下,在一次提交中完成整个25GB的文件可能会有自己的问题。在
相关问题 更多 >
编程相关推荐