Stundas uzdevums: Savienot Python kodu ar PostgreSQL datubāzi un izpildīt drošus parametrizētus vaicājumus.
70 min darba sadalījums: 1. uzdevums (~20 min) - atjauno teorijas piemēru vai minimālo prototipu; 2. uzdevums (~25 min) - pielieto to galvenajā uzdevumā; 3. uzdevums (~25 min) - pārbaudi rezultātu, izlabo kļūdas un tikai beigās pieraksti vienu secinājumu. Papildus/4. līmeņa uzdevums ir paredzēts tikai tad, ja pamatdarbs ir pabeigts.
Pirms sāc: izmanto iepriekš apgūto un šīs lapas teorijas/koda piemērus. Ja vajadzīga jauna komanda vai rīks, vispirms atrodi tās paraugu teorijas sadaļā.
psycopg2 ir Python bibliotēka, kas savieno tavu kodu ar PostgreSQL datubāzi. Instalācija: pip install psycopg2-binary.
import psycopg2
conn = psycopg2.connect(
host="localhost",
database="spele",
user="postgres",
password="tavs_parole"
)
cur = conn.cursor()
# DROŠA parametrizēta vaicājuma forma - %s ir TIKAI vietturis
cur.execute("SELECT * FROM speletaji WHERE punkti > %s", (100,))
for rinda in cur.fetchall():
print(rinda)
conn.commit() # apstiprina izmaiņas
cur.close()
conn.close()
⚠ DROŠĪBA: NEKAD nelieto string formatēšanu (f"...{x}...") SQL vaicājumos - tas ir SQL injekcijas uzbrukums!
Šis ir īss iesildīšanās uzdevums. Nokopē sagatavi, ielīmē to pareizajā koda vietā un palaid. Šeit pietiek droši izmēģināt tēmu 10.5 Python ↔ PostgreSQL (psycopg2); detalizētu izpratni veidosi nākamajos uzdevumos.
Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.
import psycopg2
conn = psycopg2.connect(
host="localhost",
database="spele",
user="postgres",
password="tavs_parole"
)
cur = conn.cursor()
# DROŠA parametrizēta vaicājuma forma - %s ir TIKAI vietturis
cur.execute("SELECT * FROM speletaji WHERE punkti > %s", (100,))
for rinda in cur.fetchall():
print(rinda)
conn.commit() # apstiprina izmaiņas
cur.close()
conn.close()
main.py failā un palaid no termināļa.Pievieno šīs stundas datu paņēmienu kā nelielu, strādājošu projekta daļu.
speletaji, rezultati vai ielade_topu().Pārbaudi, vai datu algoritms darbojas paredzami.
Ja pamatdarbs ir pabeigts, paplašini projektu ar vienu nelielu datu uzlabojumu.
f"WHERE id = {user_id}" - vienmēr %s + parametru tuple.with bloku vai try/finally - savienojumi jāatbrīvo.import psycopg2
from psycopg2.extras import RealDictCursor
with psycopg2.connect(
host="localhost", database="spele",
user="postgres", password="parole"
) as conn:
with conn.cursor(cursor_factory=RealDictCursor) as cur:
# DROŠA INSERT
cur.execute(
"INSERT INTO speletaji (vards) VALUES (%s) RETURNING id",
("Anna",)
)
jauns_id = cur.fetchone()["id"]
print(f"Pievienots ar id = {jauns_id}")
cur.execute("SELECT * FROM speletaji ORDER BY id DESC LIMIT 3")
for r in cur.fetchall():
print(r["vards"], r["punkti"])