Połączenie z bazą danych
Przygotowanie
Wgraj do katalogu projektu
19-dbase
plik bazy SQLitezse-ad.db
Upewnij się, że masz dostęp do bazy danych MySQL
Warto posiadać program do przeglądania plików SQLite, np.
DB Browser for SQLite
Rozwiń poprzednio tworzoną aplikację o funkcjonalności Listy oraz obsługi Bazy danych
Wizualizacja aplikacji
- PC-1
- PC-2 [RR]
- PC-3
- PC-4 [MK]
- PC-5 [GP]
- PC-6 [MO]
część
aplikacji
Przygotuj listę
QListWidget()
na lewym bocznym panelu aplikacjiLista ma być uzupełniana spisem komputerów od
1-12
przy użyciuQListWidgetItem()
Po połączeniu z bazą danych lista ma być uzupełniana Studentami przypisanymi do Komputerów
Aby przypisać Studenta do Komputera możesz użyć pola
logTry
w tabelicmsUsers
Wybór komputera/studenta z listy powinien być zapamiętywany i zaznaczonay na liście
Po wybraniu elementu z listy można wywoływać polecenia z paska narzędziowego (Start, Shutdown itd.)
Akcja po wybraniu jednego z 4 przycisków ma uaktualniać tekst statusu u dołu aplikacji
Przyszłe lekcje: Przypisanie Studenta do Komputera
Przyszłe lekcje: Wybór bazy danych oraz pola wprowadzania loginu i hasła
QListWidget()
- kontener listy, odpowiednik UL
z HTML'a
QListWidgetItem( "Nazwa etykiety" )
- element listy, odpowiednik LI
z HTML'a
QListWidget.addItem( QListWidgetItem )
- dodanie elementu do listy
QListWidget.itemClicked.connect( funkcja_obsługi )
- funkcja obsługujaca zdarzenie ekliknięcia elementu listy
QListWidget.selectedItems()[0].text())
- odczytanie etykiety tekstowej klikniętego elementu listy
Aby połączyć się z plikową bazą SQLite należy wykonać poniższe kroki:
zainstalować (jeżeli trzeba) i zaimportować bibliotekę
sqlite
do projektuwgrać plik z bazą SQLite do katalogu projektu
nawiązać połączenie z plikiem
sqlite3.connect( plik )
[opcjonalnie] zmienić sposób przetwarzania wierszy (wyników)
*.row_factory
wyzerować kursor (iterator po wynikach)
*.cursor()
wywołać zapytanie poprzez kursor
wydobyć z kursora wyniki zapytania
iterować w pętli przez wydobyte z kursora wiersze
wykonać operacje na danych zgodnie z projektem
zatwierdzić (zakończyć) połączenie oraz zamknąć połączenie z plikiem
import sqlite3
dbFile = 'zse-ad.db'
dbTable = 'cmsUsers'
Metoda łączenia z bazą
def dbcFile(self):
con = sqlite3.connect( dbFile )
con.row_factory = self.resultAsDict # ten wiersz odpowiada za konwersję wyników
cur = con.cursor()
cur.execute("SELECT * FROM "+dbTable)
res = cur.fetchall()
for row in res:
# wyniki w tablicy indeksowanej numerycznie
print(row[6]+" "+row[7])
# wyniki po konwersji przez mechanizm row_factory
print(row['surname']+" "+row['name'])
con.commit()
con.close()
Z racji prostych mechanizmów zaimplementowanych w silniku bazy SQLite,
aby przetwarzać wyniki zapytania SELECT
jako tablicę asocjacyjną (słownik)
należy zaimplementować funkcję konwertującą tablicę indeksowaną numerycznie na asocjacyjną.
def resultAsDict(self, cursor, row):
d = {}
for i, col in enumerate(cursor.description):
d[col[0]] = row[i]
return d
Aby połączyć się z plikową bazą MySQL
/ MariaDB
należy wykonać poniższe kroki:
zainstalować bibliotekę
python3 -m pip install mysql-connector-python
zaimportować bibliotekę
mysql.connector
do projektuwewnątrz mechanizmu
try: except ?:
nawiązać połączenie z baząwith connect( CREDENTIALS )
import mysql.connector
from mysql.connector import connect, Error
dbHost = 'localhost'
dbUser = 'wpisz'
dbPass = 'wpisz'
dbBase = 'cmsUsers'
Metoda łączenia z bazą
def dbcSrv(self):
try:
with connect( host= dbHost, user= dbUser, password= dbPass, database= dbBase ) as connection:
print(connection)
except Error as e:
print(e)