Welcome to Our Website

Python sqlite3 tutorial (programowanie baz danych)

w tym tutorialu będziemy pracować z bazą danych SQLite3 programowo przy użyciu Pythona.

SQLite w ogóle jest bazą danych bez serwera, które można używać w prawie wszystkich językach programowania, w tym Pythona. Bez serwera oznacza, że nie ma potrzeby instalowania oddzielnego serwera do pracy z SQLite, dzięki czemu można połączyć się bezpośrednio z bazą danych.

SQLite jest lekką bazą danych, która może zapewnić relacyjny system zarządzania bazami danych z zerową konfiguracją, ponieważ nie ma potrzeby konfigurowania lub konfigurowania czegokolwiek, aby go używać.,

będziemy używać SQLite w wersji 3 lub sqlite3, więc zacznijmy.

spis treści

Utwórz połączenie

aby używać sqlite3 w Pythonie, najpierw musisz zaimportować moduł sqlite3, a następnie utworzyć obiekt connection, który połączy nas z bazą danych i pozwoli nam wykonać polecenia SQL.

możesz utworzyć obiekt połączenia za pomocą funkcji connect ():

import sqlite3con = sqlite3.connect('mydatabase.db')

, który utworzy nowy plik o nazwie 'mydatabase.db”.,

kursor SQLite3

aby wykonać polecenia SQLite w Pythonie, potrzebujesz obiektu kursora. Można go utworzyć za pomocą metody cursor ().

kursor SQLite3 jest metodą obiektu connection. Aby wykonać polecenie sqlite3, należy najpierw nawiązać połączenie, a następnie utworzyć obiekt kursora za pomocą obiektu connection w następujący sposób:

con = sqlite3.connect('mydatabase.db')cursorObj = con.cursor()

teraz możemy użyć obiektu cursor do wywołania metody execute() do wykonania dowolnych zapytań SQL.,

Utwórz bazę danych

podczas tworzenia połączenia z SQLite, który utworzy plik bazy danych automatycznie, jeśli jeszcze nie istnieje. Ten plik bazy danych jest tworzony na dysku; możemy również utworzyć bazę danych w pamięci RAM za pomocą :memory: z funkcją connect. Ta baza danych jest nazywana bazą danych w pamięci.

rozważ poniższy kod, w którym utworzyliśmy bazę danych za pomocą próby, except I finally blocks, aby obsłużyć wszelkie wyjątki:

najpierw importujemy moduł sqlite3, a następnie definiujemy funkcję sql_connection., Wewnątrz tej funkcji mamy blok try, w którym funkcja connect () zwraca obiekt połączenia po nawiązaniu połączenia.

wtedy mamy except block, który w przypadku jakichkolwiek WYJĄTKÓW wyświetla komunikat o błędzie. Jeśli nie ma błędów, połączenie zostanie nawiązane i wyświetli komunikat w następujący sposób.

Po tym, zamknęliśmy nasze połączenie w bloku finally. Zamknięcie połączenia jest opcjonalne, ale jest to dobra praktyka programowania, więc zwalniasz pamięć z niewykorzystanych zasobów.,

Utwórz tabelę

aby utworzyć tabelę w SQLite3, możesz użyć zapytania Utwórz tabelę w metodzie execute (). Wykonaj następujące kroki:

  1. Utwórz obiekt połączenia.
  2. z obiektu connection Utwórz obiekt kursora.
  3. używając obiektu cursor, wywołujemy metodę execute z parametrem create table query.,

stwórzmy pracowników z następującymi atrybutami:

employees (id, name, salary, department, position, hireDate)

kod będzie wyglądał następująco:

w powyższym kodzie zdefiniowaliśmy dwie metody, pierwsza ustanawia połączenie, a druga metoda tworzy obiekt kursora do wykonania instrukcji create table.

metoda commit() zapisuje wszystkie wprowadzone zmiany. W końcu wywołane są obie metody.

aby sprawdzić, czy nasza tabela została utworzona, możesz użyć przeglądarki DB dla SQLite, aby wyświetlić tabelę. Otwórz mydatabase.,plik db z programem i powinieneś zobaczyć swoją tabelę:

Wstaw w tabeli

aby wstawić dane do tabeli, używamy instrukcji INSERT INTO. Rozważ następujący wiersz kodu:

cursorObj.execute("INSERT INTO employees VALUES(1, 'John', 700, 'HR', 'Manager', '2017-01-04')")con.commit()

aby sprawdzić, czy dane są włożone, kliknij Przeglądaj dane w przeglądarce DB:

możemy również przekazać wartości / argumenty do instrukcji INSERT w metodzie execute (). Możesz użyć znaku zapytania (?) jako symbol zastępczy dla każdej wartości., Składnia wstawki będzie następująca:

cursorObj.execute('''INSERT INTO employees(id, name, salary, department, position, hireDate) VALUES(?, ?, ?, ?, ?, ?)''', entities)

gdzie encje zawierają wartości zastępcze w następujący sposób:

entities = (2, 'Andrew', 800, 'IT', 'Tech', '2018-02-06')

cały kod jest następujący:

zaktualizuj tabelę

aby zaktualizować tabelę, po prostu utwórz połączenie, następnie utwórz obiekt kursora za pomocą połączenia i na koniec użyj instrukcji UPDATE w metodzie execute ().

Załóżmy, że chcemy zaktualizować nazwisko pracownika, którego id jest równe 2., Do aktualizacji wykorzystamy Oświadczenie o aktualizacji i dla pracownika, którego id wynosi 2. Użyjemy klauzuli WHERE jako warunku, aby wybrać tego pracownika.

rozważ następujący kod:

spowoduje to zmianę nazwy z Andrew Na Rogers w następujący sposób:

SELECT statement

możesz użyć instrukcji select, aby wybrać dane z konkretnej tabeli. Jeśli chcesz wybrać wszystkie kolumny danych z tabeli, możesz użyć gwiazdki (*)., Składnia tego polecenia będzie następująca:

select * from table_name

w SQLite3 instrukcja SELECT jest wykonywana w metodzie execute obiektu cursor., Na przykład wybierz wszystkie kolumny tabeli pracowników, uruchom następujący kod:

cursorObj.execute('SELECT * FROM employees ')

Jeśli chcesz wybrać kilka kolumn z tabeli, określ kolumny w następujący sposób:

select column1, column2 from tables_name

na przykład

cursorObj.execute('SELECT id, name FROM employees')

instrukcja SELECT wybiera wymagane dane z tabeli bazy danych, a jeśli chcesz pobrać wybrane dane, zostanie użyta metoda fetchall() obiektu cursor. Zademonstrujemy to w następnej sekcji.,

Fetch all data

aby pobrać dane z bazy danych, wykonamy instrukcję SELECT, a następnie użyjemy metody fetchall() obiektu cursor do zapisania wartości do zmiennej. Następnie przejdziemy przez zmienną w pętli i wydrukujemy wszystkie wartości.

kod będzie wyglądał następująco:

powyższy kod wydrukuje rekordy w naszej bazie danych w następujący sposób:

Możesz również użyć funkcji fetchall() w jednej linii w następujący sposób:


Jeśli chcesz pobrać określone dane z naszej bazy danych w bazie danych można użyć klauzuli WHERE., Na przykład chcemy pobrać identyfikatory i nazwiska tych pracowników, których pensja jest większa niż 800. W tym celu wypełnimy naszą tabelę większą liczbą wierszy, a następnie wykonamy nasze zapytanie.

do wypełnienia danych można użyć polecenia insert lub wprowadzić je ręcznie w programie DB browser.

teraz, aby pobrać id i nazwiska tych, którzy mają pensję większą niż 800:

w powyższej instrukcji SELECT, zamiast używać gwiazdki ( * ), podaliśmy atrybuty id i name., Wynik będzie następujący:

sqlite3 rowcount

sqlite3 rowcount jest używany do zwracania liczby wierszy, których dotyczy lub które zostały wybrane przez ostatnie wykonane zapytanie SQL.

gdy użyjemy rowcount z instrukcją SELECT, -1 zostanie zwrócone, ponieważ liczba wybranych wierszy nie jest znana, dopóki wszystkie nie zostaną pobrane., Rozważ poniższy przykład:

print(cursorObj.execute('SELECT * FROM employees').rowcount)

dlatego, aby uzyskać liczbę wierszy, musisz pobrać wszystkie dane, a następnie uzyskać długość wyniku:

rows = cursorObj.fetchall()print len (rows)

gdy używasz instrukcji DELETE bez żadnych warunków (klauzula WHERE), która usunie wszystkie wiersze w tabeli i zwróci całkowitą liczbę usuniętych wierszy w ROWCOUNT.

print(cursorObj.execute('DELETE FROM employees').rowcount)

Jeśli żaden wiersz nie zostanie usunięty, zwróci zero.,

Wyświetla listę tabel

aby wyświetlić listę wszystkich tabel w bazie danych SQLite3, należy odpytywać tabelę sqlite_master, a następnie użyć fetchall (), aby pobrać wyniki z instrukcji SELECT.

sqlite_master jest tabelą główną w SQLite3, która przechowuje wszystkie tabele.

wyświetli listę wszystkich tabel w następujący sposób:

sprawdź, czy tabela istnieje, czy nie

podczas tworzenia tabeli powinniśmy upewnić się, że tabela nie istnieje. Podobnie przy usuwaniu / usuwaniu tabeli tabela powinna istnieć.,s” z instrukcją DROP TABLE w następujący sposób:

drop table if exists table_name

na przykład

cursorObj.execute('drop table if exists projects')

możemy również sprawdzić, czy tabela, do której chcemy uzyskać dostęp, istnieje, czy nie, wykonując następujące zapytanie:

cursorObj.execute('SELECT name from sqlite_master WHERE type = "table" AND name = "employees"')print(cursorObj.fetchall())

Jeśli tabela pracowników istnieje, zwróci swoją nazwę w następujący sposób:

Jeśli nazwa tabeli nie istnieje, zostanie zwrócona pusta tablica:

upuść tabelę

możesz upuścić/usunąć tabelę za pomocą polecenia Drop., Składnia polecenia DROP jest następująca:

drop table table_name

aby upuścić tabelę, tabela powinna istnieć w bazie danych. Dlatego zaleca się użycie polecenia” jeśli istnieje”z instrukcją drop w następujący sposób:

drop table if exists table_name

na przykład

wyjątki sqlite3

wyjątki są błędami czasu wykonania. W Pythonie wszystkie wyjątki są instancjami klasy wywodzącej się z wyrażenia BaseException.,

w SQLite3 mamy następujące główne wyjątki Pythona:

DatabaseError

każdy błąd związany z bazą danych powoduje powstanie DatabaseError.

IntegrityError

IntegrityError jest podklasą DatabaseError i jest wywoływana, gdy występuje problem z integralnością danych. Na przykład dane zagraniczne nie są aktualizowane we wszystkich tabelach, co powoduje ich niespójność.

ProgrammingError

wyjątek ProgrammingError pojawia się, gdy występują błędy składniowe lub nie znaleziono tabeli lub funkcja jest wywoływana z niewłaściwą liczbą parametrów / argumentów.,

OperationalError

ten wyjątek jest wywoływany, gdy operacje na bazie danych nie powiodą się, na przykład podczas nietypowego rozłączenia. To nie jest wina programistów.

NotSupportedError

gdy używasz metod, które nie są zdefiniowane lub obsługiwane przez bazę danych, spowoduje to wywołanie wyjątku NotSupportedError.

sqlite3 Executemany (Bulk insert)

możesz użyć instrukcji executemany do wstawienia wielu wierszy naraz.

rozważ następujący kod:

tutaj stworzyliśmy tabelę z dwiema kolumnami, a „data” ma cztery wartości dla każdej kolumny., Przekazujemy zmienną do metody executemany () wraz z zapytaniem.

zauważ, że użyliśmy symbolu zastępczego, aby przekazać wartości.

powyższy kod wygeneruje następujący wynik:

Zamknij połączenie

Po Zakończeniu pracy z bazą danych dobrym rozwiązaniem jest zamknięcie połączenia. Połączenie można zamknąć za pomocą metody close ().,

aby zamknąć połączenie, użyj obiektu connection i wywołaj metodę close() w następujący sposób:

con = sqlite3.connect('mydatabase.db')#program statementscon.close()

sqlite3 datetime

w bazie danych Pythona sqlite3 możemy łatwo zapisać datę lub czas importując moduł datatime. Następujące formaty są najczęściej używanymi formatami datetime:

YYYY-MM-DDYYYY-MM-DD HH:MMYYYY-MM-DD HH:MM:SSYYYY-MM-DD HH:MM:SS.SSSHH:MMHH:MM:SSHH:MM:SS.SSSnow

rozważ następujący kod:

w tym kodzie najpierw zaimportowaliśmy moduł datetime i utworzyliśmy tabelę o nazwie assignments z trzema kolumnami.

typem danych trzeciej kolumny jest data., Aby wstawić datę w kolumnie, użyliśmy datetime.Data. Podobnie możemy użyć datetime.czas na poradzenie sobie z czasem.

powyższy kod wygeneruje następujące wyjście:

duża elastyczność i mobilność bazy danych SQLite3 sprawia, że każdy programista może z niej korzystać i wysyłać ją z dowolnym produktem, z którym pracuje.

możesz używać baz danych SQLite3 w projektach Windows, Linux, Mac OS, Android i iOS ze względu na ich niesamowitą przenośność. Więc wysyłasz jeden plik ze swoim projektem i to wszystko.

mam nadzieję, że tutorial okaże się przydatny., Wracaj.

Dziękuję.

Ayesha Tariq jest inżynierem oprogramowania stosu, programistą internetowym i entuzjastą blockchain. Posiada rozległą wiedzę z zakresu C / C++, Javy, Kotlina, Pythona i wielu innych.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *