Połączenie z bazą danych Przygotowanie Wgraj do katalogu projektu 19-dbase plik bazy SQLite zse-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 1 Zadanie do wykonania Rozwiń poprzednio tworzoną aplikację o funkcjonalności Listy oraz obsługi Bazy danych Wizualizacja aplikacji StartShutdownStand byHibernate PC-1 PC-2 [RR] PC-3 PC-4 [MK] PC-5 [GP] PC-6 [MO] Centralna część aplikacji Przygotuj listę QListWidget() na lewym bocznym panelu aplikacji Lista ma być uzupełniana spisem komputerów od 1-12 przy użyciu QListWidgetItem() 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 tabeli cmsUsers 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 2 Obsługa widgetu Listy 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 3 Nawiązanie połączenia z plikiem bazy SQLite Aby połączyć się z plikową bazą SQLite należy wykonać poniższe kroki: zainstalować (jeżeli trzeba) i zaimportować bibliotekę sqlite do projektu wgrać 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 4 Nawiązanie połączenia z bazą danych MySQL 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 projektu wewną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)
StartShutdownStand byHibernate PC-1 PC-2 [RR] PC-3 PC-4 [MK] PC-5 [GP] PC-6 [MO] Centralna część aplikacji