2014-02-24 73 views
1

我有腳本A含義使用額外的循環

... 
cursor.execute('SELECT col1, col2 FROM tableA') 
rows = cursor.fetchall() 
for row in rows: 
    statement = 'INSERT INTO tableB (col1, col2) VALUES (%s, %s)' 
    args = row.col1, row.col2 
    cursor.execute(statement, args) 

和文字B

... 
columns = [] 
cursor.execute('SELECT col1, col2 FROM tableA') 
rows = cursor.fetchall() 
for row in rows: 
    column_object = [row.col1, row.col2] 
    columns.append(column_object) 

for column_object in columns: 
    statement = 'INSERT INTO tableB (col1, col2) VALUES (%s, %s)' 
    args = column_object[0], column_object[1] 
    cursor.execute(statement, args) 

使用小樣本測試集,我跑了兩個腳本5倍,性能是可以忽略不計。一種方法比另一種更受歡迎嗎?

+1

更復雜,不要手動插入文本查詢。這就是SQL注入發生的方式。 – Blender

+0

你爲什麼不使用參數化查詢? –

+0

@Blender這是一個內部維護腳本。 – Kermit

回答

1

腳本A使用更少的內存,並且更短更簡單。所以我會用A.

你可以通過轉動柱的建設成爲發電機解決內存問題在B,但它仍然會比A.

+0

由於遊標的結果('cursor.fetchall()')存儲在'rows'中,我假定當使用遊標執行新語句時,循環不會被打斷? – Kermit