Heim >Backend-Entwicklung >Python-Tutorial >Detaillierte Erläuterung der Schritte zum Betrieb einer SQLite-Datenbank in Python

Detaillierte Erläuterung der Schritte zum Betrieb einer SQLite-Datenbank in Python

黄舟
黄舟Original
2017-06-18 11:22:132140Durchsuche

Dieser Artikel stellt hauptsächlich die Methode zum Betrieb der SQLite-Datenbank in Python vor. Er bietet eine detailliertere Analyse der Python-Installation des SQLite-Datenbankmoduls und gängiger Betriebstechniken für die SQLite-Datenbank.

Dies Der Artikel erklärt die Beispiele. Erfahren Sie, wie Python SQLite-Datenbanken bedient. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Eine kurze Einführung in SQLite

SQLite-Datenbank ist eine sehr kompakte eingebettete Datenbank Open-Source-Datenbanksoftware, das heißt, es gibt keinen unabhängigen Wartungsprozess und die gesamte Wartung erfolgt durch das Programm selbst. 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 KB 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, wird zu einem integrierten Modul, was uns den Installationsaufwand erspart, einfach importieren~


import sqlite3

2. Erstellen / Öffnen Sie die Datenbank

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 Es gibt folgende Vorgänge:

① commit()--Transaktionsübermittlung
② rollback()--Transaktions-Rollback
③ close()--Schließen einer Datenbankverbindung
④ Cursor () --Cursor erstellen

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 dazu auch „isolation_level=None“ festlegen es wird zum automatischen Übermittlungsmodell.

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-Scroll

1 >

Code kopieren Der Code lautet wie folgt:

cu.execute("Tabellenkatalog erstellen (id

integer Primary Key,pid integer, name varchar( 10) UNIQUE, Nickname text NULL)")

Die obige Anweisung erstellt eine Tabelle namens Katalog, die eine Primärschlüssel-ID, eine PID und einen Namen hat. Der Name kann nicht wiederholt werden und a Der Standardwert für den Spitznamen ist NULL.

2. Daten einfügen

Bitte vermeiden Sie folgende Schreibweise:


# Never do this -- insecure 会导致注入攻击
pid=200
c.execute("... where pid = '%s'" % pid)
Der richtige Ansatz ist wie folgt. Wenn t nur ein einzelner Wert ist, sollte er auch die Form t=(n,) haben, da das Tupel unveränderlich ist.


for t in[(0,10,'abc','Yu'),(1,20,'cba','Xu')]:
  cx.execute("insert into catalog values (?,?,?,?)", t)
Fügen Sie einfach zwei Datenzeilen ein, aber es muss daran erinnert werden, dass es erst nach der Übermittlung wirksam wird. Wir verwenden das Datenbankverbindungsobjekt cx an Rollback-Rollback-Vorgang einreichen und festschreiben.


cx.commit()

3. Abfrage


cu.execute("select * from catalog")
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, ist die erste in Die Liste wird zuerst zurückgegeben. Wenn der Artikel erneut verwendet wird, kehren Sie zum zweiten Artikel zurück und fahren Sie in der Reihenfolge fort

Hinweis, Änderung Daten später übermitteln

In [12]: cu.execute("update catalog set name='Boy' where id = 0")
In [13]: cx.commit()
5. Löschen


6 . Verwenden Sie Chinesisch

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

Bitte stellen Sie zunächst sicher, dass Ihre IDE- oder System-Standardkodierung utf-8 ist, und fügen Sie u

vor Chinesisch hinzu

x=u'鱼'
cu.execute("update catalog set name=? where id = 0",x)
cu.execute("select * from catalog")
cu.fetchall()
[(0, 10, u'\u9c7c', u'Yu'), (1, 20, u'cba', u'Xu')]

如果要显示出中文字体,那需要依次打印出每个字符串


In [26]: for item in cu.fetchall():
  ....:   for element in item:
  ....:     print element,
  ....:   print
  ....: 
0 10 鱼 Yu
1 20 cba Xu

7.Row类型

Row提供了基于索引和基于名字大小写敏感的方式来访问列而几乎没有内存开销。 原文如下:

sqlite3.Row provides both index-based and case-insensitive name-based access to columns with almost no memory overhead. It will probably be better than your own custom dictionary-based approach or even a db_row based solution.

Row对象的详细介绍

class sqlite3.Row
A Row instance serves as a highly optimized row_factory for Connection objects. It tries to mimic a tuple in most of its features.
It supports mapping access by column name and index, iteration, representation, equality testing and len().
If two Row objects have exactly the same columns and their members are equal, they compare equal.
Changed in version 2.6: Added iteration and equality (hashability).
keys()
This method returns a tuple of column names. Immediately after a query, it is the first member of each tuple in Cursor.description.
New in version 2.6.

下面举例说明


In [30]: cx.row_factory = sqlite3.Row
In [31]: c = cx.cursor()
In [32]: c.execute('select * from catalog')
Out[32]: <sqlite3.Cursor object at 0x05666680>
In [33]: r = c.fetchone()
In [34]: type(r)
Out[34]: <type &#39;sqlite3.Row&#39;>
In [35]: r
Out[35]: <sqlite3.Row object at 0x05348980>
In [36]: print r
(0, 10, u&#39;\u9c7c&#39;, u&#39;Yu&#39;)
In [37]: len(r)
Out[37]: 4
In [39]: r[2]      #使用索引查询
Out[39]: u&#39;\u9c7c&#39;
In [41]: r.keys()
Out[41]: [&#39;id&#39;, &#39;pid&#39;, &#39;name&#39;, &#39;nickname&#39;]
In [42]: for e in r:
  ....:   print e,
  ....: 
0 10 鱼 Yu

使用列的关键词查询


In [43]: r[&#39;id&#39;]
Out[43]: 0
In [44]: r[&#39;name&#39;]
Out[44]: u&#39;\u9c7c&#39;

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Schritte zum Betrieb einer SQLite-Datenbank in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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