2016-10-10 16 views
-1

データベースにデータを挿入する小さなコードがあります。ただし、データは逆の順序で挿入されています。
forループが実行された後に "コミット"すると、逆ループが挿入されます。forループの一部としてコミットすると、正しい順序で挿入されますが、はるかに遅くなります。
forループの後にコミットできますが、正しい順序を保持できますか?Python SQLITE3後方への挿入

あなたがSQLデータベーステーブル内の任意 順序に依存することはできません
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

。挿入はインプリメンテーション依存の方法で行われ、行の終了は使用されたストレージ実装と既に存在するデータに依存します。

このように、逆転は起こりません。テーブルから再度データを選択していて、これらの行が逆の順序で戻ってくる場合、それは偶然であり、データベースが選択したものではありません。

行を特定の順序で戻す必要がある場合は、選択するときにORDER BYを使用します。例えば、ROWIDで注文することができます。となり、新しい行に対して単調に増加するため、挿入順序の近似値が得られます。 ROWIDs and the INTEGER PRIMARY KEYを参照してください。

関連する問題