2017-08-01 1 views
1

私はこれらの関数をtkinterボタンのクリックで呼び出しています。コミットが行われているので、一度、私はロールバックをやって呼んでいるが、その変更Pythonでコミット後にsqlite3の変更をロールバックすることは可能ですか?

def insert(_id,name,phone): 
       conn = sqlite3.connect(db) 
       print ("Opened database successfully"); 
       print (name,phone) 
       conn.execute("INSERT INTO VARUN (ID,NAME,PHONE) \ 
        VALUES (?,?,?)",(_id,name,phone)); 
       conn.commit() 
       print ("New record(s)" , name," has just been added to the database"); 
       conn.close() 


def rollback(): 

    conn = sqlite3.connect(db) 
    conn.rollback() 
    print ("\n changes reverted") 
    conn.close() 
+1

[ACID Compliance](http://www.fredosaurus.com/notes-db/transactions/acid.html)の意味を調べることができます。コミットとロールバックは、データベースの状態の「ポイント・イン・タイム」レコードではありません。それらは個々の*トランザクション*を制御します。これは、順番に実行される一連のクエリを表します。特に、「コミットする」とは、「すべてのデータ変更を最終的にし、将来のすべてのトランザクションで利用できるようにする」ことを意味します。 – jpmc26

答えて

3

を元に戻すない変更を元に戻す必要がある場合、これは不可能です。トランザクションがコミットされると、すべての変更がデータベースにマージされ、他のデータと区別できなくなります。

変更を後で元に戻す場合は、変更された結果だけでなく、データベースに変更を復元するための十分な情報も保存する必要があります。 例としてAutomatic Undo/Redo Using SQLiteを参照してください。

関連する問題