2016-06-17 7 views
0

Ich bin ein Noob über SQLite (aber etwas wie Pythonista erlebt), aber ich bin sehr verwirrt, warum diese (Python 2.7, DBPATH ist der Pfad zu der Datenbank) ...Python Sqlite3 löschen nichts zu tun

import sqlite3 

connection = sqlite3.connect(DBPATH) 
cursor = connection.cursor() 
query = "SELECT * from jobs" 
cursor.execute(query) 
print(cursor.fectchall()) 
query = "DELETE from jobs" 
cursor.execute(query) 

... Gibt den Inhalt der Tabelle (also den Namen der Tabelle) aus, ohne sie zu ändern. Könnte jemand auf das Offensichtliche hinweisen?

+1

Nach der 'conn.execute()' werfen Sie in eine 'conn.commit()', um Ihre Änderungen zu begehen. – bernie

+1

Die Benennung ist verwirrend. Das Definieren des Cursors als 'conn' (Verbindung) ist nicht hilfreich für das Verständnis. In diesem Fall glaube ich, @bernies Antwort ist eigentlich 'connection.commit()', weil du eine nicht standardisierte Benennung verwendest? – roganjosh

+0

Leider begann der Code als Stück Copypasta und entwickelte sich von dort. Ich werde die Benennung beheben. Danke euch allen. Bearbeiten: Die Variable wurde in den Cursor geändert. –

Antwort

3

Aus dem Handbuch:

commit()

Diese Methode die aktuelle Transaktion. Wenn Sie diese -Methode nicht aufrufen, ist alles, was Sie seit dem letzten Aufruf von commit() getan haben, von anderen Datenbankverbindungen nicht sichtbar. Wenn Sie sich fragen, warum Sie die Daten nicht sehen können, die Sie in die Datenbank geschrieben haben, überprüfen Sie bitte, ob Sie nicht vergessen haben, diese Methode aufzurufen.

Stattdessen können Sie die Isolationsstufe beim Herstellen einer Verbindung festlegen, wodurch die Commits für Sie automatisiert werden.

self.db = sqlite3.connect(self.db_name, isolation_level=None) 
2

Sie müssen commit() nach jeder CUD Operation, die Sie in Ihrer Datenbank tun.

Wenn Sie C reate, U pdate oder D elete, dann commit().

+1

Sorry, dass ich nicht zwei auswählen kann "richtige" Antworten. Ich denke beide sind sehr gut. Danke dir auch. –