2016-10-10 111 views
-1

我有一小段代碼將一些數據插入到數據庫中。但是,數據正在以相反的順序插入。
如果我在for循環運行後「提交」,它會向後插入,如果我將「commit」作爲for循環的一部分,它將按正確的順序插入,但速度會更慢。
我如何在for循環之後提交但仍保留正確的順序?Python SQLITE3向後插入

import subprocess, sqlite3 
output4 = subprocess.Popen(['laZagne.exe', 'all'], stdout=subprocess.PIPE).communicate()[0] 
lines4 = output4.splitlines() 

conn = sqlite3.connect('DBNAME') 
cur = conn.cursor() 


for j in lines4: 
    print j 
    cur.execute('insert into Passwords (PassString) VALUES (?)',(j,)) 
conn.commit() 
conn.close() 
+0

爲什麼訂單對您很重要? – polku

+1

反向意味着什麼?插入順序如何以任何方式影響您的數據庫?如果你想要的話,你總是可以反轉lines4列表,然後遍歷它。 –

+0

數據庫表未訂購。您可以通過'ORDER BY'以特定的順序要求生成行。 –

回答

1

你不能依靠在SQL數據庫表中的任何排序。插入以與實現相關的方式進行,行的最終位置完全取決於所使用的存儲實現和已存在的數據。

因此,不會發生逆轉;如果您再次從表中選擇數據,並且這些行以相反的順序返回,那麼這是巧合,而不是數據庫所做的選擇。

如果行必須以特定順序返回,請在選擇時使用ORDER BY。例如,您可以通過ROWID進行訂購,其中可能對於新行單調增加,並因此給出了插入順序的近似值。見ROWIDs and the INTEGER PRIMARY KEY