Duomenų bazės - DonatasNoreika/python1lygis GitHub Wiki
Kas yra duomenų bazė
- Duomenų bazė – organizuotas duomenų rinkinys (lentelėse)
- Duomenų bazė yra failas, o ne programa
- Reliacinė duomenų bazėje lentelės susijusios tarpusavyje ryšiais
- Su duomenų baze komunikuojama užklausomis (taip kuriamos lentelės, stulpeliai, jų tipai, keičiami, trinami duomenys)
Duomenų bazių pavyzdžiai
- Oracle
- MySQL
- Microsoft SQL Server
- PostgreSQL
- Microsoft Access
- SQLite
Darbui su SQLite duomenų baze (be python) naudosime programą DB Browser for SQLite
Svarbiausios DB (SQL) užklausos
-
SELECT sakinys naudojamas įrašams iš vienos ar daugiau lentelių atrinkti.
-
FROM sakinyje nurodomos lentelės, iš kurių reikia išrinkti eilutes (sąryšiai gali būti nurodomi skirtingais JOIN variantais).
-
WHERE sakinyje nurodoma sąlyga, kurią turi tenkinti grąžinamos eilutės.
-
GROUP BY sąlygoje nurodoma, kad reikia grupuoti tam tikras eilutes. Grupuojant eilutes, dažniausiai naudojamos agregatinės funkcijos maksimalioms, vidutinėms ir panašioms reikšmėms išrinkti iš grupuotų eilučių.
-
ORDER BY sakiniu nurodoma viena ar daugiau rikiavimo sąlygų.
-
HAVING sakinyje nurodomas kriterijus, taikomas grupuojamoms eilutėms;
-
HAVING raktinis žodis gali būti naudojamas tik tais atvejais, jeigu užklausoje yra GROUP BY sakinys.
-
INSERT vartojamas naujų įrašų įterpimui į lentelę.
-
DELETE leidžia ištrinti įrašus iš lentelės.
-
UPDATE naudojamas pakeisti vieno ar daugiau įrašų reikšmes.
-
DISTINCT - skirtingų reikšmių išrinkimas.
-
DROP TABLE pašalina visą lentelę.
Kaip sukurti lentelę
CREATE TABLE darbuotojai (vardas text, pavarde text, atlyginimas integer)
Kaip įdėti įrašą (eilutę) į lentelę:
INSERT INTO darbuotojai (vardas, pavarde, atlyginimas) VALUES (naujasvardas, naujapavarde, naujasatlyginimas)
Kaip peržiūrėti įrašus lentelėje:
SELECT * FROM darbuotojai
arba
SELECT * FROM darbuotojai WHERE pavarde = ieskomapavarde
Kaip pakeisti įrašą lentelėje:
UPDATE darbuotojai SET atlyginimas = naujasatlyginimas WHERE pavarde = ieskomapavarde
Kaip ištrinti lentelės įrašą:
DELETE from darbuotojai WHERE vardas = ieskomasvardas AND pavarde = ieskomapavarde
Darbas su duomenų baze per Python
import sqlite3
conn = sqlite3.connect("duomenu_baze.db")
c = conn.cursor()
with conn:
c.execute("""CREATE TABLE IF NOT EXISTS
darbuotojai (
vardas text,
pavarde text,
atlyginimas integer
)""")
Būdas be with:
import sqlite3
conn = sqlite3.connect("duomenu_baze.db")
c = conn.cursor()
c.execute("""CREATE TABLE darbuotojai (
vardas text,
pavarde text,
atlyginimas integer
)""")
conn.commit()
conn.close()
Kaip dirbti su laikina duomenų baze:
import sqlite3
conn = sqlite3.connect(":memory:")
c = conn.cursor()
with conn:
c.execute("""CREATE TABLE IF NOT EXISTS
asmenys (
vardas text,
pavarde text,
amzius integer
)""")
Kaip įdėti įrašą (eilutę) į lentelę:
import sqlite3
conn = sqlite3.connect("duomenu_baze.db")
c = conn.cursor()
with conn:
c.execute("INSERT INTO darbuotojai VALUES ('Domantas', 'Rutkauskas', 1500)")
c.execute("INSERT INTO darbuotojai VALUES ('Rimas', 'Radzevičius', 1000)")
Kaip ieškoti įrašų lentelėje:
import sqlite3
conn = sqlite3.connect("duomenu_baze.db")
c = conn.cursor()
with conn:
c.execute("SELECT * From darbuotojai WHERE pavarde='Rutkauskas'")
print(c.fetchall())
Kaip pakeisti įrašą lentelėje:
import sqlite3
conn = sqlite3.connect("duomenu_baze.db")
c = conn.cursor()
with conn:
c.execute("UPDATE darbuotojai SET atlyginimas=3000 WHERE pavarde='Radzevičius'")
with conn:
c.execute("SELECT * From darbuotojai")
print(c.fetchall())
Kaip ištrinti įrašą (eilutę) lentelėje:
import sqlite3
conn = sqlite3.connect("duomenu_baze.db")
c = conn.cursor()
with conn:
c.execute("DELETE from darbuotojai WHERE pavarde='Rutkauskas'")
with conn:
c.execute("SELECT * From darbuotojai")
print(c.fetchall())
import sqlite3
conn = sqlite3.connect("duomenu_baze.db")
c = conn.cursor()
with conn:
c.execute("""CREATE TABLE IF NOT EXISTS
darbuotojai (
vardas text,
pavarde text,
atlyginimas integer
)""")
while True:
print("Įveskite darbuotoją")
vardas = input("Vardas: ")
pavarde = input("Pavarde:")
atlyginimas = int(input("atlyginimas :"))
with conn:
c.execute(f"INSERT INTO darbuotojai VALUES ('{vardas}', '{pavarde}', {atlyginimas})")
with conn:
c.execute("SELECT * FROM darbuotojai")
print(c.fetchall())
Užduotys
1 užduotis
Parsisiųskite lentelę, atsidarykite ją programoje DB Browser for SQLite ir skiltyje "Execute SQL" atlikite šias SQL užklausas:
- Išrinkite visus duomenis iš lentelės “DARBUOTOJAI”.
- Išrinkite visus duomenis iš stulpelio “GIMIMO_DATA” - lentelėje “DARBUOTOJAS”.
- Išrinkite visus duomenis iš stulpelių “VARDAS”,”PAVARDĖ”, “PAREIGOS” - lentelėje “DARBUOTOJAI”.
- Išrinkite skirtingas reikšmes iš stulpelio SKYRIUS_PAVADINIMAS - lentelėje “DARBUOTOJAI”.
- Išrinkite visus duomenis apie darbuotojus, kurie dirba Gamybos skyriuje.
- Išrinkite duomenis, kokias pareigas užima Giedrius
- Išrinkite visus duomenis apie darbuotojus, kurių gimimo data - 1986-09-19
- Išrinkite darbuotojų vardus, kurių pavardės yra Sabutis
- Išrinkite duomenis (vardą ir pavardę) apie programuotojus iš Gamybos skyriaus
- Įterpkite į lentelę “DARBUOTOJAI” naują darbuotoją, užpildydami visus reikiamus laukus (vardą, pavardę, gimimo datą, pareigas ir skyriaus pavadinimą).
- Įterpkite į lentelę “DARBUOTOJAI” naują darbuotoją, užpildydami tik laukus (vardą, pavardę, gimimo datą). Pareigas ir skyriaus pavadinimą palikite neužpildytus.
- Užpildykite likusius tuščius laukus “DARBUOTOJAI” lentelėje, jūsų prieš tai įterptame įraše. Priskirkite darbuotojui pareigas ir skyrių.
- Ištrinkite lentelės “DARBUOTOJAI” įrašą, kurio gimimo data yra tokia, kurią jūs sukūrėte.
- Įterpkite, du darbuotojus, pavarde Antanaitis kurių pareigos būtų “Programuotojas”.
- Pakeiskite, abiejų Antanaičių pareigas į “Testuotojas” vienu sakiniu.
- Suskaičiuokite, kiek įmonėje dirba Testuotojų.
2 užduotis
- Sukurti programą, kuri:
- Sukurtų duomenų bazę
- Sukurtų lentelę paskaitos su stulpeliais pavadinimas, destytojas ir trukme
- Sukurtų tris paskaitas: ('Vadyba', 'Domantas', 40), ('Python', 'Donatas', 80) ir ('Java', 'Tomas', 80)
- Atspausdintų tik tas paskaitas, kurių trukmė didesnė už 50
- Atnaujintų paskaitos „Python“ pavadinimą į „Python programavimas“
- Ištrintų paskaitą, kurios dėstytojas – „Tomas“
- Atspausdintų visas paskaitas (visą lentelę)