Programmierung

Beherrschen der SQLite-Datenbank in Python

Beherrschen der SQLite-Datenbank in Python

SQLite ist ein relationales Datenbankverwaltungssystem basierend auf der Sprache SQL; es ist eine serverlose, konfigurationsfreie Datenbank-Engine. Es ist eine der beliebtesten Datenbank-Engines und sehr einfach in kleinen Anwendungen zu verwenden. Es erstellt nur eine Festplattendatei, um die gesamte Datenbank zu speichern, was die Datei portabel macht. Es wird im Android-Betriebssystem als primäre Quelle zum Speichern von Daten verwendet. Es wird auch von Google Chrome verwendet, um Website- und Benutzerdaten, einschließlich Passwörtern, auf dem lokalen Computer zu speichern.

Fortgeschrittenes Arbeiten mit SQLite-Datenbank in Python

In diesem Tutorial werden folgende Themen behandelt: Einfügen von Bildern in eine SQLite-Tabelle, Auflisten der in einer Datenbank vorhandenen Tabellen, Identifizieren der gesamten Änderungen seit der Verbindung der Datenbank, Sichern einer Datenbank, Dumpen einer SQLite-Datenbank, Rollback in SQLite, Löschen De Datensätze aus einer Tabelle, Löschen einer Tabelle und SQLite-Datenbankausnahmen.

Vielleicht möchten Sie auch den ersten Teil dieses Tutorials sehen, der die Grundlagen von SQLite, Vorteile der Verwendung, Herstellen einer Verbindung zu einer Datenbankdatei, Erstellen einer Tabelle in der Datenbank, Einfügen von Daten in die Tabelle, Abfragen von Daten aus der Tabelle, Aktualisieren der Tabelle und vieles mehr.

Dateien und Bilder in der SQLite-Datenbank

Bei der Arbeit mit Datenbanken gibt es Situationen, in denen Sie Bilder oder Dateien in eine Datenbank einfügen oder daraus exportieren müssen. Wenn Sie beispielsweise eine Datenbank zum Speichern von Mitarbeiterdaten erstellen, müssen Sie möglicherweise auch Bilder von jedem Mitarbeiter in die Datenbank einfügen.

Um Bilder zu einer SQLite-Datenbank hinzuzufügen, müssen wir den BLOB-Datentyp von SQLite verwenden. Der Datentyp BLOB() wird verwendet, um große Objekte zu speichern, typischerweise große Dateien wie Bilder, Musik, Videos, Dokumente, PDF usw. Der erste Schritt besteht darin, die Daten und Bilder in das Byte-Objekt von Python zu konvertieren, das dem BLOB-Datentyp von SQLite ähnelt. Bevor Sie fortfahren, erstellen Sie eine Tabelle mit dem Namen Schüler in der Datenbank mit den Feldern id, name, images, marks. Führen Sie den folgenden Code aus, um die Tabelle zu erstellen.

sqlite3 conn importieren = sqlite3.connect("Beispiel.db") print("\n [+] Erfolgreich mit der Datenbank verbunden") cur = conn.Cursor() print("\n [+] Cursor wurde erfolgreich eingerichtet") table = cur.execute(""" CREATE TABLE student( id INT PRIMARY KEY, name TEXT, images BLOB, mark TEXT ); """) print("\n [+] Die Tabelle wurde erfolgreich erstellt") cur.schließen() Verbindung.commit() conn.schließen()

Dieses Programm erstellt eine neue Tabelle mit dem Namen Schüler. Sie sehen die folgende Ausgabe im Terminal.

Ein Bild einfügen

Um ein Bild in eine SQLite-Datenbank einzufügen, wandeln Sie das Bild in ein Python-Byte-Objekt um und fügen Sie es dann in die Bilderspalte ein, die BLOB-Daten akzeptiert. Führen Sie den folgenden Code aus, um ein Bild hinzuzufügen img.png in der Datenbank mit Python.

sqlite3 conn importieren = sqlite3.connect("Beispiel.db") conn.text_factory = str print("\n [+] Erfolgreich mit der Datenbank verbunden") cur = conn.Cursor() print("\n [+] Cursor wurde erfolgreich eingerichtet") with open("img.png","rb") als Datei: data = file.read() python_tuple = (101,"robin",data,"90") print("\n [+] Das Bild wurde erfolgreich importiert") print("\n [+] Wird jetzt in die Datenbank eingefügt") cur.execute("INSERT INTO student (id,name,images,marks) VALUES (?,?,?,?)", python_tuple) print("\n [+] Die Daten wurden erfolgreich eingefügt ") cur.schließen() Verbindung.commit() conn.schließen()

Dieses Programm fügt das Bild in die von Ihnen erstellte Schülerdatenbank ein. Sie sehen die folgende Ausgabe.

Im obigen Programm haben wir die Datei im Binärmodus geöffnet und jedes Byte gelesen und in Variable gespeichert store Daten. Dann verwenden wir diese Variable in der INSERT-Anweisung, um das Bild in die Datenbank einzufügen.

Abrufen eines Bildes

Um ein Bild aus einer Datenbank abzurufen, rufen Sie die Zeile mit einer select-Anweisung ab und greifen Sie dann auf die Binärdaten des Bildes in eine Python-Variable zu, die in einer Bilddatei gespeichert wird. Siehe den folgenden Code zur Veranschaulichung.

sqlite3 conn importieren = sqlite3.connect("Beispiel.db") conn.text_factory = str print("\n [+] Erfolgreich mit der Datenbank verbunden") cur = conn.Cursor() print("\n [+] Cursor wurde erfolgreich eingerichtet") print("\n [+] Bild abrufen") cur.execute("SELECT * FROM student") ret = cur.fetchall() für i in ret: data = i[2] with open("img2.png","wb") als Datei: Datei.write(data) print("\n [+] Das Bild wurde gespeichert") cur.schließen() Verbindung.commit() conn.schließen()

Dieses einfache Programm ruft das Bild aus der Datenbank ab und speichert es auf der Festplatte namens img2.png. Sie können auch einen anderen Namen für die Bilddatei wählen. Die Ausgabe des Programms ist unten gezeigt.

Alle Tabellen einer Datenbank auflisten

In einer Datenbank können wir zahlreiche Tabellen erstellen. Es besteht also auch die Notwendigkeit, alle in einer Datenbank vorhandenen Tabellen aufzulisten. Um die in einer Datenbank vorhandenen Tabellen aufzulisten, fragen Sie die sqlite_master-Tabelle mit der SELECT-Anweisung von SQL ab. Die Syntax der Abfrage lautet:

SELECT name FROM sqlite_master WHERE type="table"

So verwenden wir diese Abfrage, um alle in unserer Datenbank vorhandenen Tabellen aufzulisten.

sqlite3 conn importieren = sqlite3.connect("Beispiel.db") print("\n [+] Erfolgreich mit der Datenbank verbunden") cur = conn.Cursor() print("\n [+] Cursor wurde erfolgreich eingerichtet") cur.execute("SELECT name from sqlite_master where type="table"") rows = cur.fetchall() print(rows) cur.schließen() Verbindung.commit() conn.schließen()

Der obige Code listet alle Tabellen auf, die in unserer Datenbank vorhanden sind. Die Ausgabe, die der Code bei der Ausführung erzeugt, ist wie folgt. Abhängig von den Tabellen, die Sie in der Datenbank erstellt haben, sehen Sie möglicherweise eine andere Ausgabe.

Identifizieren der gesamten Änderungen seit der Verbindung mit der Datenbank

In jeder Situation ist es hilfreich, die Anzahl der Zeilen zu ermitteln, die seit der Verbindung mit der Datenbank geändert, eingefügt oder gelöscht wurden. Verwenden Sie dazu die total_changes() -Methode des Verbindungsobjekts, die die Gesamtzahl der Datenbankzeilen zurückgibt, die seit der Verbindung betroffen waren. Lassen Sie uns eine Beispiel-Demo sehen, um zu erfahren, wie es funktioniert.

sqlite3 conn importieren = sqlite3.connect("Beispiel.db") conn.text_factory = str print("\n [+] Erfolgreich mit beiden Datenbanken verbunden") cur = conn.Cursor() print("\n [+] Sowohl der Cursor wurde erfolgreich eingerichtet") cur.execute("INSERT INTO student (id, name, images, marks) VALUES (140, 'David',",99 )") cur.execute("INSERT INTO student (id, name,images, marks) VALUES (150, 'Sam',", 97)") changes = conn.total_changes print("\n [+] Die Gesamtzahl der Zeilenänderungen ist jetzt :,Änderungen) conn.commit() cur.schließen() Verbindung.schließen()

Das obige Programm druckt die Anzahl der Zeilenänderungen in der aktuellen Verbindung. Sie sehen die folgende Ausgabe.

Rollback in SQLite

Wenn Sie einige Aufgaben rückgängig machen möchten, können Sie die Funktion rollback() verwendenback. Diese Methode kann verwendet werden, um Aufgaben rückgängig zu machen, die nach dem letzten Commit ausgeführt wurden. Siehe das folgende Beispiel für eine Illustration.

sqlite3 conn importieren = sqlite3.connect("Beispiel.db") conn.text_factory = str print("\n [+] Erfolgreich mit beiden Datenbanken verbunden") cur = conn.Cursor() print("\n [+] Sowohl der Cursor wurde erfolgreich eingerichtet") cur.execute("INSERT INTO student (id, name, images, marks) VALUES (100001, 'David',",99 )") cur.execute("INSERT INTO student (id, name,images, marks) VALUES (100002, 'Sam',", 97)") conn.commit() print("\n [+] Die zwei Zeilen wurden erfolgreich eingefügt") cur.execute("SELECT * FROM student") first = cur.fetchall() print("\n [+] Die neuen Datensätze in der Datenbank sind :") für i zuerst: print(i) cur.execute("INSERT INTO student (id, name, images, marks) VALUES (10003, 'Kishan',", 100)") cur.execute("INSERT INTO student (id, name, images, marks) VALUES (10004, 'Ankit',", 100)") print("\n [+] Die zwei Zeilen wurden erfolgreich eingefügt, aber nicht festgeschrieben") conn.rollback() print("\n [+] Wir haben die vorherigen Befehle zurückgesetzt, damit die neuen Daten nicht eingefügt werden") conn.commit() cur.execute("SELECT * FROM student") second = cur.fetchall() print("\n [+] Die neuen Datensätze in der Datenbank sind :") for i in second: print(i) cur.schließen() Verbindung.schließen()

Im obigen Beispiel fügen die ersten beiden Einfügeanweisungen die Daten wie angegeben ein, aber die letzten beiden Einfügeanweisungen sind ein Rollback, sodass keine Daten in die Tabelle eingefügt werden. Die Ausgabe wird wie unten gezeigt sein.

Eine Datenbank sichern

Während der Arbeit mit der Datenbank ist es unbedingt erforderlich, ein Backup der Datenbank zu erstellen. Das sqlite3-Modul bietet eine Funktion, um das Backup der Datenbank zu erstellen. Mit der Methode backup() des Verbindungsobjekts können wir die Sicherung der SQLite-Datenbank erstellen. Die grundlegende Syntax der Backup-Methode ist:

backup(target, *, pages=0, progress=None, name="main", sleep=0.250)

Standardmäßig oder wenn Seiten sind entweder 0 oder eine negative ganze Zahl, wird die gesamte Datenbank in einem einzigen Schritt kopiert, was für eine kleine Datenbank vorzuziehen ist; andernfalls führt die Methode eine Schleife durch, die bis zu kopiert wird Seiten zu einer Zeit, die mit der umfangreichen Datenbank möglich wäre. Das Name Argument zeigt den Datenbanknamen an, der kopiert wird: Es muss eine Zeichenfolge sein, die entweder den Standardwert enthält, um die Hauptdatenbank anzugeben, oder um die temporäre Datenbank anzugeben temporary. Das schlafen -Argument gibt die Zeit in Sekunden an, die zwischen den Sicherungsversuchen der verbleibenden Seiten vergehen soll. Es kann entweder eine ganze Zahl oder ein Gleitkommawert sein.

Lassen Sie uns ein Backup der Datenbank.db Datenbank, die wir im Tutorial verwendet haben.

sqlite3 importieren conn_main = sqlite3.connect("Beispiel.db") conn_backup = sqlite3.connect("sample_backup.db") print("\n [+] Erfolgreich mit beiden Datenbanken verbunden") cur_main = conn_main.Cursor() cur_backup = conn_backup.Cursor() print("\n [+] Der Cursor wurde erfolgreich eingerichtet") conn_main.backup(conn_backup, pages=0, progress=None, name="main") print("Die Datenbank wurde erfolgreich gesichert") cur_main.close() cur_backup.close() conn_main.commit() conn_backup.commit() conn_main.close() conn_backup.schließen()

Im obigen Code sind die beiden Datenbanken verbunden, eine ist die Datenbank, von der wir ein Backup erstellen möchten, und die zweite ist die Datenbank, in der wir das Backup erstellen werden. Verwenden Sie die Backup() Methode des ersten Datenbankverbindungsobjekts, um ein Backup zu erstellen. Diese Funktion akzeptiert das Verbindungsobjekt der zweiten Datenbank als Ziel, um ein Backup auf der anderen Datenbank zu erstellen. Verwenden Sie die Seiten = 0 Argumente, der Vorgang erfolgt also in einem Schritt, was für kleine Datenbanken empfohlen wird. Dieses Programm erstellt ein neues Datenbanknamenbeispiel database_sicherung.db und fülle es mit dem Backup der ersten Datenbank. Möglicherweise sehen Sie, dass im aktuellen Ordner eine neue Datenbank mit derselben Dateigröße wie der vorherige erstellt wurde.

Dumping einer SQLite-Datenbank

Das Dumpen von Datenbanken ist eine wichtige Aufgabe. Normalerweise ist eine Dump-Datei ein Satz von SQL-Anweisungen für die Daten, die im Allgemeinen für Backups verwendet werden. Wir können eine Datenbank mit der Methode dump() ablegen. Sehen Sie sich das folgende Beispiel an, um zu erfahren, wie Sie eine SQLite-Datenbank löschen.

sqlite3 importieren con = sqlite3.connect("Datenbank.db") mit open('dump.sql', 'w') als f: für Zeile in con.iterdump(): f.write('%s\n' % Zeile)

Das obige Programm wird das Datenbankbeispiel ausgeben.db, und es speichert die Dump-Daten in einer Datei namens dump.sql. Sie können die Daten in dem Verzeichnis sehen, in dem die Python-Dateien aktuell sind, und es mit einem beliebigen Texteditor öffnen.

executemany() Methode von SQLite3

Das führe viele () aus -Methode führt einen SQL-Befehl gegen alle Parametersequenzen oder Mappings aus, die in der Sequenz gefunden wurden seq_of_parameters. Der Einfachheit halber kann diese Methode verwendet werden, um die meisten SQL-Befehle in einer Zeile auszuführen. E.G., Wir können mit diesem Befehl eine beliebige Anzahl von Zeilen durch eine Python-Liste einfügen. Siehe das folgende Beispiel für die Illustration.

sqlite3 conn importieren = sqlite3.connect("Beispiel.db") print("\n [+] Erfolgreich mit der Datenbank verbunden") cur = conn.Cursor() print("\n [+] Cursor wurde erfolgreich eingerichtet") python_list = [(10000000 ,'vivek',",'10'), (100000001,'rose',",'21'), (100000002,'robin',",'31'), (100000003,'Dev',",'4'), (100000004,'michael',",'52') ] cur.executemany("INSERT INTO student (id, name, images, marks) VALUES (?,?,?,?)",python_list) print("\n [+] Alle Daten wurden erfolgreich eingefügt ") cur.schließen() Verbindung.commit() conn.schließen()

Das obige Programm fügt alle in der Python-Liste angegebenen Daten ein. Die vom Programm erzeugte Ausgabe ist unten gezeigt.

Datensätze aus einer Tabelle löschen

Wir können die DELETE-Operation verwenden, um Datensätze aus einer Tabelle zu löschen. Wir können eine Zeile schnell entfernen, indem wir die DELETE-Operation mit der WHERE-Klausel verwenden. Die grundlegende Syntax für die DELETE-Anweisung lautet:

DELETE from table_name WHERE some_condition;

Sehen wir uns ein Beispiel an. Wir werden die Zeile mit der ID 1001 aus der Mitarbeitertabelle unserer Datenbank löschen.

sqlite3 conn importieren = sqlite3.connect("Beispiel.db") conn.text_factory = str print("\n [+] Erfolgreich mit der Datenbank verbunden") cur = conn.Cursor() print("\n [+] Cursor wurde erfolgreich eingerichtet") cur.execute("DELETE FROM student WHERE id=1001") print("\n [+] Die Zeile wurde erfolgreich gelöscht ") cur.execute("SELECT * FROM student") data = cur.fetchall() für Zeile in Daten: print(row) cur.schließen() Verbindung.commit() conn.schließen()

Der obige Code löscht die Zeile mit der ID 1001. An der Rückgabe der SELECT-Anweisung können Sie erkennen, dass die Zeile entfernt wurde. Die Ausgabe des Programms ist wie unten gezeigt.

Einen Tisch fallen lassen

Wir können eine Tabelle mit der SQLite DROP-Anweisung schnell löschen oder löschen. Die Syntax der DROP-Anweisung ist wie folgt:

DROP-Tabelle table_name 

Wenn die Tabelle nicht existiert, gibt SQLite einen Fehler aus. Um dies zu verhindern, können wir die falls vorhanden Tag mit der DROP-Anweisung. Siehe die folgende Syntax:

Tabelle DROP, falls vorhanden table_name

Lassen Sie uns sehen, wie wir diese Anweisung mit der Python verwenden können sqlite3 Modul zum Löschen einer Tabelle. In diesem Programm entfernen wir die Schüler Tabelle, die wir zuvor erstellt haben.

sqlite3 conn importieren = sqlite3.connect("Beispiel.db") conn.text_factory = str print("\n [+] Erfolgreich mit der Datenbank verbunden") cur = conn.Cursor() print("\n [+] Cursor wurde erfolgreich eingerichtet") cur.execute("DROP TABLE IF EXISTS student") print("\n [+] Die Tabelle wurde erfolgreich gelöscht") cur.schließen() Verbindung.commit() conn.schließen()

Das obige Programm löscht die Tabelle Schüler von dem Stichprobe Datenbank. Wir können den Befehl list table verwenden, den wir zuvor gesehen haben, um zu sehen, ob die Tabelle gelöscht ist. Die Ausgabe des Programms ist wie unten gezeigt.

SQLite-Datenbankausnahmen

Einige SQLite-Datenbankausnahmen können aufgrund eines Fehlers ausgelöst werden. Mal sehen, wann diese Fehler aufgetreten sind.

Dies ist die Liste aller SQLite-Ausnahmen; Wir können diese Ausnahmen in unseren Programmen mit der grundlegenden Try/Exception-Fehlerbehandlungsmethode von Python behandeln.

Fazit

Damit sind wir am Ende des umfassenden Leitfadens zu fortgeschrittenen Methoden der Arbeit mit SQLite unter Verwendung von Python. Ich hoffe, Sie haben alle Aspekte von SQLite3 mit Python gelernt, die uns helfen werden, fantastische Python-Projekte zu erstellen.

Mit WinMouse können Sie die Mauszeigerbewegung auf einem Windows-PC anpassen und verbessern improve
Wenn Sie die Standardfunktionen Ihres Mauszeigers verbessern möchten, verwenden Sie Freeware WinMouse. Es fügt weitere Funktionen hinzu, damit Sie das...
Linker Mausklick funktioniert nicht unter Windows 10
Wenn Sie eine dedizierte Maus mit Ihrem Laptop oder Desktop-Computer verwenden, aber die linker Mausklick funktioniert nicht unter Windows 10/8/7 aus ...
Cursor springt oder bewegt sich zufällig während der Eingabe in Windows 10
Wenn Sie feststellen, dass Ihr Mauszeiger während der Eingabe auf einem Windows-Laptop oder -Computer automatisch und zufällig springt oder sich von s...