Python má ve své standardní knihovně vestavěnou vynikající podporu databází, takže můžete vytvářet databáze a pracovat s nimi, aniž byste se spoléhali na externí rámce, jako je Django ORM.
SQLite je lehký a snadno se integruje s Pythonem. Objevte základní principy programování databází v Pythonu pomocí jednoduché aplikace pro registraci uživatelů.
Table of Contents
Jak vytvořit databázi v Pythonu
K vytvoření a interakci s databází v Pythonu potřebujete dvě hlavní věci: připojení a kurzor.
Připojení vám pomůže připojit se k existující databázi nebo vytvořit novou. Zde je návod, jak vytvořit připojení k databázi v Pythonu s SQLite:
import sqlite3
conn = sqlite3.connect('path/to/database.db')
conn.close()
Metoda connect() přebírá cestu k existující databázi. Pokud na zadané cestě není žádná databáze, vytvoří se. Po dokončení práce s databází byste měli ukončit připojení k databázi.
Kurzor vám pomáhá při interakci s připojenou databází. Kurzor použijete ke spouštění SQL dotazů v programu Python. Zde je návod, jak vytvořit kurzor:
cursor = conn.cursor()
cursor.close()
Kurzor můžete vytvořit voláním metody kurzor() na otevřeném objektu připojení.
Jak provést databázovou transakci v Pythonu
Pomocí kurzoru můžete spouštět příkazy SQL, dotazy nebo skripty, číst nebo zapisovat data nebo měnit strukturu databáze.
Existují tři hlavní metody, které můžete použít k provedení databázové transakce.
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
name TEXT,
age INTEGER
)
""")
Tento kód zavolá metodu spuštění na kurzor a předá mu řetězec obsahující příkaz SQL.
data = [
('Alice', 25),
('Bob', 30),
('Charlie', 22)
]cursor.executemany("""INSERT INTO users (name, age) VALUES (?, ?)""", data)
Výše uvedený kód používá metodu executemany k vícenásobnému vkládání hodnot do databáze.
Všimněte si ? zástupné symboly v příkazu SQL. Metoda executemany je nahradí odpovídajícími hodnotami pro každý objekt.
with open("path/to/script.sql") as file:
sql_script = file.read()cursor.executescript(sql_script)
Jak vytvořit registrační aplikaci s Pythonem a SQLite3
Logika registrační aplikace zahrnuje získání informací o uživateli pomocí Pythonu a jejich uložení do databáze. Tyto kroky vám ukážou, jak vytvořit jednoduchý registrační systém s Pythonem a SQLite3.
Krok 1: Připojte se ke stávající databázi nebo vytvořte novou
Začněte vytvořením databáze pro vaši aplikaci nebo připojením k existující:
import sqlite3conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.close()
conn.close()
Výše uvedený kód vytvoří objekt připojení a kurzor pro interakci s připojenou databází.
Krok 2: Vytvořte tabulku pro uživatele
Potřebujete tabulku pro uložení údajů, které uživatelé poskytnou při registraci. Zde je návod, jak jej vytvořit pomocí kurzoru:
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
first_name TEXT,
last_name TEXT,
email TEXT UNIQUE,
password TEXT
)
""")conn.commit()
Tento kód vytvoří tabulku nazvanou uživatelé, pokud ve vaší databázi neexistuje. V tabulce vytvoří čtyři sloupce, do kterých budou uloženy informace o uživateli. Pole e-mailu je jedinečné, aby uživatelům zabránilo ve vytváření více účtů se stejným e-mailem.
Volání conn.commit je důležité pro potvrzení dotazu do databáze. Bez něj nedojde k žádným změnám v databázi.
Pokud používáte metodu vykonatelného skriptu, můžete přidat klíčové slovo COMMIT na konec svého SQL souboru, takže nemusíte volat conn.commit.
Krok 3: Shromážděte uživatelská data
Funkce Pythonu usnadňují opětovné použití kódu, takže je dobré vytvořit funkci pro zpracování funkce registrace. Tato funkce shromažďuje jméno, příjmení, e-mail a heslo uživatele.
def register_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")
email = input("Enter your email: ")
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
Krok 4: Zkontrolujte správnost hesla
Upravte funkci register_user, abyste zajistili, že uživatel zadá stejné heslo dvakrát. Pokud ne, měli byste je vyzvat k opětovnému zadání hesla. Můžete toho dosáhnout pomocí smyčky, jako je tato:
def register_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")
email = input("Enter your email: ")while True:
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
if password1 == password2:
print("You have successfully registered!")
break
else:
print("Your passwords must match")
S touto změnou se uživatel nemůže zaregistrovat, pokud se jeho hesla neshodují.
Krok 5: Zkontrolujte jedinečnost e-mailu
Příkaz SQL, který vytváří tabulku uživatelů, definuje pole e-mailu jako jedinečné. To znamená, že databáze vrátí chybu, pokud se uživatel zaregistruje pomocí e-mailu, který již existuje. Abyste mohli správně jednat, musíte zpracovat výjimku Pythonu:
def register_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")while True:
email = input("Enter your email: ")
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
if password1 == password2:
try:
print("You have successfully created an account.")
break
except sqlite3.IntegrityError:
print("Error: This email is already registered.")
else:
print("Your passwords must match.")
Tento kód používá blok try-except ke zpracování chyby, ke které dojde z duplicitních e-mailů. Pokud databáze vyvolá chybu IntegrityError, smyčka while bude pokračovat a vyzve uživatele k zadání jiné e-mailové adresy.
U této ukázkové aplikace lze bezpečně předpokládat, že k chybě IntegrityError dojde pouze v důsledku duplicitní e-mailové adresy. Ve skutečné aplikaci pravděpodobně použijete pokročilejší zpracování chyb k vyřešení dalších problémů, které mohou nastat.
Krok 6: Vložte data uživatele do databáze
Nyní, když jste shromáždili a ověřili data uživatele, je čas přidat je do databáze. K tomu můžete použít SQL dotaz. Upravte svůj blok try-except takto:
try:
cursor.execute("""
INSERT INTO users (first_name, last_name, email, password)
VALUES (?, ?, ?, ?)
""", (first_name, last_name, email, password2))conn.commit()
print("You have successfully created an account.")
break
except sqlite3.IntegrityError:
print("Error: This email is already registered.")
V upraveném bloku try-except kurzor provede operaci vložení SQL. Nakonec metoda conn.commit potvrdí operaci SQL do databáze.
Pokud jste dodrželi všechny výše uvedené kroky, měli byste mít aplikaci, která uživatele registruje a ukládá do databáze. Můžete použít aplikaci jako Prohlížeč DB pro SQLite pro zobrazení obsahu databáze:
Použití databází namísto typů kolekcí
U jednoduchých databází může být jednodušší vytvořit vlastní kód. Jak se však vaše aplikace rozrůstá a databáze se stává složitější, zvažte použití nástroje, jako je Django ORM, ke zjednodušení úlohy.
Chcete-li pokračovat v procvičování svých nízkoúrovňových databázových dovedností, zkuste implementovat přihlašovací systém jako doplněk k registračnímu programu.