Heim  >  Artikel  >  php教程  >  SQLite-Datenbankoperationen mit Python

SQLite-Datenbankoperationen mit Python

高洛峰
高洛峰Original
2016-11-23 11:35:241756Durchsuche

Eine kurze Einführung

Die SQLite-Datenbank ist eine sehr kleine eingebettete Open-Source-Datenbanksoftware, was bedeutet, dass es keinen unabhängigen Wartungsprozess gibt und die gesamte Wartung vom Programm selbst erfolgt. Es handelt sich um ein relationales Datenbankverwaltungssystem, das dem ACID-Standard entspricht und in vielen eingebetteten Produkten verwendet wird. In eingebetteten Geräten sind möglicherweise nur wenige 100 K Speicher erforderlich genug. Es kann gängige Betriebssysteme wie Windows/Linux/Unix unterstützen und mit vielen Programmiersprachen wie Tcl, C#, PHP, Java usw. sowie ODBC-Schnittstellen kombiniert werden. Es wird auch mit den beiden offenen Schnittstellen verglichen Im Vergleich zu den bekannten Datenbankverwaltungssystemen ist die Verarbeitungsgeschwindigkeit schneller als bei allen anderen. Die erste Alpha-Version von SQLite wurde im Mai 2000 geboren. Es ist nun 10 Jahre her und SQLite hat auch die Veröffentlichung einer Version von SQLite 3 eingeläutet.

Installation und Verwendung

1. Importieren Sie das Python SQLITE-Datenbankmodul

Nach Python2. 5, integriertes SQLite3, wurde zu einem integrierten Modul, das uns den Installationsaufwand erspart. Importieren Sie es einfach~

import sqlite3

2. Erstellen/ Datenbank öffnen

Geben Sie beim Aufruf der Verbindungsfunktion den Bibliotheksnamen an. Wenn die angegebene Datenbank vorhanden ist, öffnen Sie sie direkt. Wenn sie nicht vorhanden ist, erstellen Sie eine neue.

cx = sqlite3.connect("E:/test.db")

Sie können auch eine Datenbank im Speicher erstellen.

con = sqlite3.connect(":memory:")

3. Datenbankverbindungsobjekt

Das beim Öffnen der Datenbank zurückgegebene Objekt cx ist ein Datenbankverbindungsobjekt, das die folgenden Vorgänge haben kann:

commit()--Transaktionsübermittlung

rollback()--Transaktions-Rollback

close()--Schließen eine Datenbankverbindung

cursor() – Erstellen Sie einen Cursor

Wenn in Bezug auf commit() die Isolationsstufe „isolation_level“ die Standardeinstellung ist, müssen Sie diesen Befehl für jede Operation in der Datenbank verwenden. Sie können auch „isolation_level=None“ festlegen, um in den Auto-Commit-Modus zu wechseln.

4. Verwenden Sie den Cursor, um die Datenbank abzufragen.

Wir müssen die SQL-Anweisung des Cursorobjekts verwenden, um die Datenbank abzufragen und das Abfrageobjekt abzurufen. Definieren Sie einen Cursor auf folgende Weise.

cu=cx.cursor()

Das Cursorobjekt verfügt über die folgenden Operationen:

execute() – SQL-Anweisung ausführen

executemany – mehrere SQL-Anweisungen ausführen

close() – den Cursor schließen

fetchone() – einen Datensatz aus dem Ergebnis übernehmen und den Cursor auf den nächsten Datensatz zeigen

fetchmany() – mehrere Datensätze aus dem Ergebnis abrufen

fetchall() – alle Datensätze aus dem Ergebnis abrufen

scroll() – Cursor-Scrollen

1. Tabelle erstellen

cu.execute("Tabellenkatalog erstellen (ID-Ganzzahl-Primärschlüssel, PID-Ganzzahl, Name varchar(10) UNIQUE, Spitzname-Text NULL)")

Die obige Anweisung erstellt eine Tabelle mit dem Namen „Katalog“, die über eine Primärschlüssel-ID, eine PID und einen Namen verfügt. Der Name kann nicht wiederholt werden und ein Spitzname ist standardmäßig NULL.

2. Daten einfügen

Bitte vermeiden Sie die folgende Schreibweise:

# Tun Sie dies niemals – unsicher führt zu Injektionsangriffen pid=200c. ausführen ("...wo pid = '%s'" % pid)

Der richtige Ansatz ist wie folgt. Wenn t nur ein einzelner Wert ist, muss er auch die Form t=(n haben ,), da Tupel nicht geändert werden.

für t in[(0,10,'abc','Yu'),(1,20,'cba','Xu')]: cx.execute("in Katalogwerte einfügen (? ,?,?,?)", t)

Fügen Sie einfach zwei Datenzeilen ein. Beachten Sie jedoch, dass dies erst nach der Übermittlung wirksam wird. Wir verwenden das Datenbankverbindungsobjekt cx to Rollback-Vorgang senden und zurückgeben.

cx.commit()

3. Abfrage

cu.execute("select * aus Katalog")

Um die abgefragten Daten zu extrahieren, verwenden Sie die Abruffunktion des Cursors, wie zum Beispiel:

In [10]: cu.fetchall() Out[10]: [ (0, 10 , u'abc', u'Yu'), (1, 20, u'cba', u'Xu')]

Wenn wir cu.fetchone() verwenden, das erste in der Liste wird zurückgegeben. Wenn ein Element erneut verwendet wird, wird zum zweiten Element zurückgekehrt und der Reihe nach fortgefahren

4. Ändern

In [12]: cu.execute("update Catalog Set Name ='Boy' where id = 0") In [13]: cx.commit()

Hinweis: Nach Änderung der Daten senden

5. Löschen

cu.execute("delete from Catalog where id = 1") cx.commit()

6 >

Bitte bestätigen Sie zuerst Ihre IDE. Oder die Standardcodierung des Systems ist utf-8, und fügen Sie u

vor Chinesisch hinzu

x=u'鱼' cu.execute("Katalogsatzname aktualisieren=?, wobei ID = 0",x) cu.execute("Auswählen * aus Katalog") cu.fetchall() [(0, 10, u'u9c7c', u'Yu'), (1, 20, u'cba', u'Xu')]

Wenn Sie chinesische Schriftarten anzeigen möchten, müssen Sie jede Zeichenfolge nacheinander ausdrucken

In [26]: für Element in cu.fetchall(): ....: für Element in Element: ....: Druckelement, ....: Drucken . ...: 0 10 fish Yu 1 20 cba Der Originaltext lautet wie folgt:

sqlite3.Row bietet sowohl indexbasierten als auch namenbasierten Zugriff ohne Berücksichtigung der Groß- und Kleinschreibung, fast ohne Speicheraufwand. Es wird wahrscheinlich besser sein als Ihr eigener benutzerdefinierter wörterbuchbasierter Ansatz oder sogar eine db_row-basierte Lösung.

Detaillierte Einführung des Row-Objekts

Klasse sqlite3.Row

Eine Row-Instanz dient als hochoptimierte row_factory für Verbindungsobjekte. Sie versucht, in den meisten ihrer Funktionen ein Tupel nachzuahmen.

Es unterstützt den Zuordnungszugriff nach Spaltenname und Index, Iteration, Darstellung, Gleichheitstests und len().

Wenn zwei Zeilenobjekte genau die gleichen Spalten haben und ihre Mitglieder gleich sind, sind sie im Vergleich gleich.

Geändert in Version 2.6: Iteration und Gleichheit (Hashbarkeit) hinzugefügt.

keys( )

Diese Methode gibt unmittelbar nach einer Abfrage das erste Mitglied jedes Tupels in Cursor.description zurück.

Neu in Version 2.6.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:KeinerNächster Artikel:Java、JavaScript、asp.net 、jquery 详细分析