SQLite - Python

W tym rozdziale dowiesz się, jak używać SQLite w programach w języku Python.

Instalacja

SQLite3 można zintegrować z Pythonem za pomocą modułu sqlite3, którego autorem jest Gerhard Haring. Zapewnia interfejs SQL zgodny ze specyfikacją DB-API 2.0 opisaną w PEP 249. Nie musisz instalować tego modułu oddzielnie, ponieważ jest on dostarczany domyślnie wraz z wersją Python 2.5.x.

Aby użyć modułu sqlite3, musisz najpierw utworzyć obiekt połączenia, który reprezentuje bazę danych, a następnie opcjonalnie możesz utworzyć obiekt kursora, który pomoże ci w wykonywaniu wszystkich instrukcji SQL.

Interfejsy API modułu Python sqlite3

Poniżej przedstawiono ważne procedury modułu sqlite3, które mogą wystarczyć do pracy z bazą danych SQLite z poziomu programu w Pythonie. Jeśli szukasz bardziej wyrafinowanej aplikacji, możesz zajrzeć do oficjalnej dokumentacji modułu Python sqlite3.

Sr.No. API i opis
1

sqlite3.connect(database [,timeout ,other optional arguments])

Ten interfejs API otwiera połączenie z plikiem bazy danych SQLite. Możesz użyć ": memory:" do otwarcia połączenia z bazą danych, która znajduje się w pamięci RAM zamiast na dysku. Jeśli baza danych zostanie otwarta pomyślnie, zwraca obiekt połączenia.

Gdy dostęp do bazy danych jest uzyskiwany przez wiele połączeń, a jeden z procesów modyfikuje bazę danych, baza danych SQLite jest blokowana do momentu zatwierdzenia transakcji. Parametr timeout określa, jak długo połączenie powinno czekać, aż blokada zniknie do momentu zgłoszenia wyjątku. Wartość domyślna parametru limitu czasu to 5,0 (pięć sekund).

Jeśli podana nazwa bazy danych nie istnieje, to wywołanie utworzy bazę danych. Możesz również określić nazwę pliku wraz z wymaganą ścieżką, jeśli chcesz utworzyć bazę danych w dowolnym miejscu poza bieżącym katalogiem.

2

connection.cursor([cursorClass])

Ta procedura tworzy plik cursorktóre będą używane przez cały czas programowania bazy danych w Pythonie. Ta metoda akceptuje jeden opcjonalny parametr cursorClass. Jeśli jest podana, musi to być niestandardowa klasa kursora, która rozszerza sqlite3.Cursor.

3

cursor.execute(sql [, optional parameters])

Ta procedura wykonuje instrukcję SQL. Instrukcja SQL może być sparametryzowana (tj. Symbole zastępcze zamiast literałów SQL). Moduł sqlite3 obsługuje dwa rodzaje symboli zastępczych: znaki zapytania i nazwane symbole zastępcze (nazwany styl).

For example - kursor.execute ("wstaw do wartości osób (?,?)", (Kto, wiek))

4

connection.execute(sql [, optional parameters])

Ta procedura jest skrótem do powyższej metody execute udostępnianej przez obiekt kursora i tworzy obiekt pośredniego kursora przez wywołanie metody kursora, a następnie wywołuje metodę wykonywania kursora z podanymi parametrami.

5

cursor.executemany(sql, seq_of_parameters)

Ta procedura wykonuje polecenie SQL na wszystkich sekwencjach parametrów lub odwzorowaniach znalezionych w sekwencji sql.

6

connection.executemany(sql[, parameters])

Ta procedura jest skrótem, który tworzy obiekt kursora pośredniego przez wywołanie metody kursora, a następnie wywołuje metodę kursor.s executemany z podanymi parametrami.

7

cursor.executescript(sql_script)

Ta procedura wykonuje jednocześnie wiele instrukcji SQL podanych w formie skryptu. Najpierw wydaje instrukcję COMMIT, a następnie wykonuje skrypt SQL, który otrzymuje jako parametr. Wszystkie instrukcje SQL powinny być oddzielone średnikiem (;).

8

connection.executescript(sql_script)

Ta procedura jest skrótem, który tworzy pośredni obiekt kursora przez wywołanie metody kursora, a następnie wywołuje metodę executescript kursora z podanymi parametrami.

9

connection.total_changes()

Ta procedura zwraca całkowitą liczbę wierszy bazy danych, które zostały zmodyfikowane, wstawione lub usunięte od czasu otwarcia połączenia z bazą danych.

10

connection.commit()

Ta metoda zatwierdza bieżącą transakcję. Jeśli nie wywołasz tej metody, wszystko, co zrobiłeś od ostatniego wywołania commit (), nie jest widoczne z innych połączeń z bazą danych.

11

connection.rollback()

Ta metoda cofa wszelkie zmiany w bazie danych od ostatniego wywołania funkcji commit ().

12

connection.close()

Ta metoda zamyka połączenie z bazą danych. Zwróć uwagę, że nie wywołuje to automatycznie funkcji commit (). Jeśli po prostu zamkniesz połączenie z bazą danych bez uprzedniego wywołania funkcji commit (), zmiany zostaną utracone!

13

cursor.fetchone()

Ta metoda pobiera następny wiersz zestawu wyników zapytania, zwracając pojedynczą sekwencję lub None, gdy nie ma więcej danych.

14

cursor.fetchmany([size = cursor.arraysize])

Ta procedura pobiera następny zestaw wierszy wyniku zapytania, zwracając listę. W przypadku braku dostępnych wierszy zwracana jest pusta lista. Metoda próbuje pobrać tyle wierszy, ile wskazuje parametr size.

15

cursor.fetchall()

Ta procedura pobiera wszystkie (pozostałe) wiersze wyniku zapytania, zwracając listę. W przypadku braku dostępnych wierszy zwracana jest pusta lista.

Połącz się z bazą danych

Poniższy kod w języku Python pokazuje, jak połączyć się z istniejącą bazą danych. Jeśli baza danych nie istnieje, to zostanie utworzona i na koniec zostanie zwrócony obiekt bazy danych.

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')

print "Opened database successfully";

Tutaj możesz także podać nazwę bazy danych jako nazwę specjalną :memory:aby stworzyć bazę danych w pamięci RAM. Teraz uruchommy powyższy program, aby utworzyć naszą bazę danychtest.dbw bieżącym katalogu. Możesz zmienić swoją ścieżkę zgodnie z wymaganiami. Zachowaj powyższy kod w pliku sqlite.py i wykonaj go, jak pokazano poniżej. Jeśli baza danych zostanie pomyślnie utworzona, wyświetli następujący komunikat.

$chmod +x sqlite.py
$./sqlite.py
Open database successfully

Utwórz tabelę

Poniższy program w Pythonie zostanie użyty do stworzenia tabeli we wcześniej utworzonej bazie danych.

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
print "Opened database successfully";

conn.execute('''CREATE TABLE COMPANY
         (ID INT PRIMARY KEY     NOT NULL,
         NAME           TEXT    NOT NULL,
         AGE            INT     NOT NULL,
         ADDRESS        CHAR(50),
         SALARY         REAL);''')
print "Table created successfully";

conn.close()

Po wykonaniu powyższego programu utworzy on tabelę COMPANY w pliku test.db i wyświetli następujące komunikaty -

Opened database successfully
Table created successfully

Operacja INSERT

Poniższy program w Pythonie pokazuje, jak tworzyć rekordy w tabeli COMPANY utworzonej w powyższym przykładzie.

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
print "Opened database successfully";

conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (1, 'Paul', 32, 'California', 20000.00 )");

conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (2, 'Allen', 25, 'Texas', 15000.00 )");

conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )");

conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )");

conn.commit()
print "Records created successfully";
conn.close()

Po wykonaniu powyższego programu utworzy podane rekordy w tabeli COMPANY i wyświetli następujące dwie linie -

Opened database successfully
Records created successfully

Wybierz operację

Poniższy program w Pythonie pokazuje, jak pobrać i wyświetlić rekordy z tabeli COMPANY utworzonej w powyższym przykładzie.

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
print "Opened database successfully";

cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print "Operation done successfully";
conn.close()

Wykonanie powyższego programu da następujący wynik.

Opened database successfully
ID = 1
NAME = Paul
ADDRESS = California
SALARY = 20000.0

ID = 2
NAME = Allen
ADDRESS = Texas
SALARY = 15000.0

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY = 20000.0

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY = 65000.0

Operation done successfully

Operacja UPDATE

Poniższy kod w Pythonie pokazuje, jak użyć instrukcji UPDATE do zaktualizowania dowolnego rekordu, a następnie pobrać i wyświetlić zaktualizowane rekordy z tabeli COMPANY.

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
print "Opened database successfully";

conn.execute("UPDATE COMPANY set SALARY = 25000.00 where ID = 1")
conn.commit()
print "Total number of rows updated :", conn.total_changes

cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print "Operation done successfully";
conn.close()

Wykonanie powyższego programu da następujący wynik.

Opened database successfully
Total number of rows updated : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY = 25000.0

ID = 2
NAME = Allen
ADDRESS = Texas
SALARY = 15000.0

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY = 20000.0

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY = 65000.0

Operation done successfully

Operacja USUŃ

Poniższy kod Pythona pokazuje, jak użyć instrukcji DELETE, aby usunąć dowolny rekord, a następnie pobrać i wyświetlić pozostałe rekordy z tabeli COMPANY.

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
print "Opened database successfully";

conn.execute("DELETE from COMPANY where ID = 2;")
conn.commit()
print "Total number of rows deleted :", conn.total_changes

cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print "Operation done successfully";
conn.close()

Wykonanie powyższego programu da następujący wynik.

Opened database successfully
Total number of rows deleted : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY = 20000.0

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY = 20000.0

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY = 65000.0

Operation done successfully