Dodawanie danych do bazy SQLite3
Po połączniu danych możemy zapełnić bazę danymi, co pozwoli nam na dalsze operacje i eksperymenty z bazą SQLite3.
Najprostszym sposobem, jest wstawianie danych linia po linii z użyciem metody .execute() . Z czego, z reguły w zaawansowanych programach się nie korzysta, ale do celów edukacyjnych nam to w zupełności wystarczy.
Załóżmy, że mamy bazę samochodów o nazwie „auta” z kolumnami nazwanymi kolejno: id, marka, model, rocznik
Teraz chcemy dodać kolejne auta w kolejnych wierszach, żeby tego dokonać musimy napisać poniższy kod:
1 2 3 4 |
kursor.execute(”INSERT INTO auta VALUES (1, ‘Ford’, ‘Focus’, 1996)”) kursor.execute(”INSERT INTO auta VALUES (2, ‘Nissan’, ‘Micra’, 2019)”) kursor.execute(”INSERT INTO auta VALUES (3, ‘Opel’, ‘Astra’, 2010)”) kursor.execute(”INSERT INTO auta VALUES (4, ‘Volvo’, ‘XC60’, 2016)”) |
Wadą powyższego kodu jest to, że musisz pamiętać, jaki ostatni numer identyfikacyjny „id” wstawiłeś i dodać kolejny. Można sobie z tym łatwo poradzić wpisując w polu identyfikatora wartość NULL , dzięki temu zabiegowi baza sama utworzy za nas właściwe „id”.
1 2 3 4 |
kursor.execute(”INSERT INTO auta VALUES (NULL, ‘Ford’, ‘Focus’, 1996)”) kursor.execute(”INSERT INTO auta VALUES (NULL, ‘Nissan’, ‘Micra’, 2019)”) kursor.execute(”INSERT INTO auta VALUES (NULL, ‘Opel’, ‘Astra’, 2010)”) kursor.execute(”INSERT INTO auta VALUES (NULL, ‘Volvo’, ‘XC60’, 2016)”) |
Możemy też dodać wiele rekordów na raz używając metody .executemany() . Dodatkowo celem zabezpieczenia zapytania przed atakami typu „wstrzyknięcia kodu SQL” (SQL injection) oraz zabezpieczenia przed potencjalnymi błędami, nie powinno się umieszczać bezpośrednio w zapytaniu SQL umieszczać wartości pól, tylko stosować zastępników (placeholder) w postaci znaków zapytania ? . Wartości będą wtedy przekazywane w tulpach, jako drugi argument. Poniżej przykład takiego kodu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# tworzymy tulpe za danymi przekazywanych aut o nazwie „samochody” samochody = ( (None, ‘Ford’, ‘Focus’, 1996), (None, ‘Nissan’, ‘Micra’, 2019), (None, ‘Opel’, ‘Micra’, 2010), (None, ‘Volvo’, ‘XC60’, 2016) ) # wstawiamy wiele rekordów z tulpy "samochody" do bazy sqlite3 # wartości pól w zapytaniu zostały ukryte w zastępnikach ‘?’ kursor.executemany(‘INSERT INTO auta VALUES(?, ?, ?, ?)’, samochody) # zatwierdzamy wprowadzane zmiany w bazie metodą .commit() polaczenie.commit() # zamykamy połączenie z bazą polaczenie.close() |
W tulpie w miejscu identyfikatora „id” pojawiła się wartość None , jest ona w tulpie odpowiednikiem wartości NULL i w tym przypadku jest wykorzystana do automatycznego nadania kolejnych wartości identyfikatora „id” do kolejnych wierszy z danymi aut.
Wprowadzone dane samochodów, powinny pojawić się w bazie SQLite3. Można je sobie łatwo podejrzeć używając managera bazy danych SQLiteStudio.