autor vybral COVID-19 podpůrný Fond obdrží dar jako součást Zápisu o Dary program.
Úvod
SQLite je samostatná databáze SQL založená na souborech. SQLite je dodáván s Pythonem a může být použit v kterékoli z vašich aplikací Python, aniž byste museli instalovat žádný další software.
v tomto tutoriálu projdeme modulem sqlite3
v Pythonu 3., Vytvoříme připojení k SQLite databáze, přidat tabulky do databáze, vložení dat do tabulka, a číst a měnit data v tabulce.
Pro tento tutoriál, budeme pracovat především s soupis ryb, které musíme upravit jako ryby jsou přidány nebo odstraněny z fiktivní akvárium.
předpoklady
Chcete-li z tohoto tutoriálu vytěžit maximum, doporučujeme mít určitou znalost programování v Pythonu a některé základní pozadí SQL.,
projděte Si tyto tutoriály pro nezbytné informace:
- Jak se Kód v Python3
- Úvod do Dotazů v MySQL
Krok 1 — Vytvoření Připojení k SQLite Databáze
Když jsme se připojit k databáze SQLite, jsme přístup k datům, které nakonec umístěn v souboru na našem počítači. SQLite databáze jsou plně vybavený SQL motory, které mohou být použity pro mnoho účelů. Prozatím budeme zvažovat databázi, která sleduje inventář ryb ve fiktivním akváriu.,
můžeme připojit k SQLite databáze pomocí Python sqlite3
modul:
import sqlite3connection = sqlite3.connect("aquarium.db")
import sqlite3
dává náš program v Pythonu přístup do sqlite3
modul. sqlite3.connect()
vrací Connection
objekt, který budeme používat k interakci s SQLite databáze konat v souboru aquarium.db
. aquarium.db
soubor je vytvořen automaticky pomocí sqlite3.connect()
aquarium.db
již neexistuje na našem počítači.,
můžeme ověřit, že jsme úspěšně vytvořili naši connection
objekt příkazem:
print(connection.total_changes)
Když jsme se spustit tento kód Pythonu, budeme vidět výstup, jako je:
Output0
connection.total_changes
je celkový počet databáze řádky, které byly změněny pomocí connection
. Vzhledem k tomu, že jsme dosud neprovedli žádné příkazy SQL, je 0 total_changes
správné.
Pokud kdykoli zjistíme, že chceme tento tutoriál znovu spustit, můžeme z našeho počítače odstranit soubor aquarium.db
.,
Poznámka: je také možné se připojit k databáze SQLite, která je umístěna přesně v paměti (a nikoli v souboru), tím, že projde speciální řetězec ":memory:"
sqlite3.connect()
. Například sqlite3.connect(":memory:")
. ":memory:"
SQLite databáze zmizí, jakmile váš Python program ukončí. To může být výhodné, pokud chcete dočasnou pískoviště zkusit něco v SQLite, a nemusíte přetrvávají všechna data po váš program ukončí.,
Krok 2-Přidání dat do databáze SQLite
Nyní, když jsme se připojili k databázi aquarium.db
SQLite, můžeme z ní začít vkládat a číst data.
v databázi SQL jsou data uložena v tabulkách. Tabulky definují sadu sloupců a obsahují 0 nebo více řádků s daty pro každý z definovaných sloupců., tabulku s názvem fish
, který sleduje tyto údaje:
jméno | druh | tank_number |
---|---|---|
Sammy | žralok | 1 |
Jamie | sépie | 7 |
fish
tabulka bude sledovat hodnotu pro name
species
tank_number
pro každou rybu v akváriu., Two example fish
rows are listed: one row for a shark
named Sammy
, and one row for a cuttlefish
named Jamie
.
We can create this fish
table in SQLite using the connection
we made in Step 1:
cursor = connection.cursor()cursor.execute("CREATE TABLE fish (name TEXT, species TEXT, tank_number INTEGER)")
connection.cursor()
returns a Cursor
object. Cursor
objects allow us to send SQL statements to a SQLite database using cursor.execute()
., "CREATE TABLE fish ..."
je řetězec SQL, který vytvoří tabulku s názvem fish
s tří sloupců je popsáno dříve: name
typu TEXT
, druhy typ TEXT
, a tank_number
typu INTEGER
.,
Nyní, že jsme vytvořili tabulku, můžeme vložit řádky dat na to:
cursor.execute("INSERT INTO fish VALUES ('Sammy', 'shark', 1)")cursor.execute("INSERT INTO fish VALUES ('Jamie', 'cuttlefish', 7)")
: cursor.execute()
dvakrát: jednou chcete-li vložit řádek pro žraloka Sammy
nádrž 1
, a jednou chcete-li vložit řádek pro sépie Jamie
nádrž 7
. "INSERT INTO fish VALUES ..."
je SQL příkaz, který nám umožňuje přidávat řádky do tabulky.,
V další části budeme používat SQL SELECT
prohlášení zkontrolujte řádky, které jsme právě vložili do fish
tabulka.
Krok 3-čtení dat z databáze SQLite
v kroku 2 jsme přidali dva řádky do tabulky SQLite s názvem fish
., Můžeme načíst řádky pomocí SELECT
SQL prohlášení:
rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)
Když jsme se spustit tento kód, uvidíme výstup jako následující:
Output
cursor.execute()
funkce spustí SELECT
prohlášení k načtení hodnot pro name
species
, a tank_number
sloupce v fish
tabulka. fetchall()
načte všechny výsledky SELECT
prohlášení., Když print(rows)
vidíme seznam dvou tuplů. Každý nuple má tři položky; jedna položka pro každý sloupec, který jsme vybrali z tabulky fish
. Dvě n-tice mají údaje, které jsme vložili v Kroku 2: jedna n-tice Sammy
shark
, a jedna n-tice Jamie
cuttlefish
.,
Pokud bychom chtěli načíst řádky v fish
tabulky, které odpovídají určité kritéria, můžeme použít WHERE
článek:
Když to spustíme, uvidíme výstup, jako je následující:
Output
stejně Jako u předchozího příkladu, cursor.execute(<SQL statement>).fetchall()
nám umožňuje načíst všechny výsledky SELECT
prohlášení. WHERE
klauzule v SELECT
prohlášení filtry pro řádky, kde hodnota name
target_fish_name
., Všimněte si, že používáme ?
nahradit target_fish_name
do proměnné SELECT
prohlášení. Očekáváme, že se zápas pouze jeden řádek, a skutečně vidíme pouze řádek Jamie
cuttlefish
vrátil.
varování: nikdy nepoužívejte operace pythonových řetězců k dynamickému vytváření řetězce příkazů SQL. Použití Python řetězec operace sestavit SQL příkaz řetězec opustí vás zranitelné vůči útokům SQL injekce. Útoky SQL injection lze použít k odcizení, změně nebo jiné úpravě dat uložených v databázi., Vždy používejte zástupný symbol ?
ve svých příkazech SQL, abyste dynamicky nahrazovali hodnoty z programu Python. Jako druhý argument předejte Tice hodnot Cursor.execute()
, aby se vaše hodnoty vážily k příkazu SQL. Tento vzor substituce je demonstrován zde a v dalších částech tohoto tutoriálu.
Krok 4 — Úprava Dat v SQLite Databáze
Řádky v SQLite databáze lze upravit pomocí UPDATE
DELETE
SQL.,
řekněme například, že Sammy žralok byl přesunut do tanku číslo 2. Můžeme změnit Sammy řádek v fish
tabulku, aby odrážel tuto změnu:
problém UPDATE
SQL příkaz změnit na tank_number
Sammy
jeho nová hodnota 2
. WHERE
klauzule v UPDATE
prohlášení zajišťuje, jsme pouze změnit hodnotu tank_number
pokud řádek name = "Sammy"
.,
Když jsme se spustit následující SELECT
prohlášení, můžeme potvrdit, že naše aktualizace byla provedena správně:
rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)
Když jsme se spustit tento, uvidíme, výstup jako následující:
Output
Všimněte si, že řádek Sammy
nyní má hodnotu 2
tank_number
sloupce.
řekněme, že Sammy žralok byl propuštěn do volné přírody a již nebyl držen akváriem., Protože Sammy již nežije v akváriu, mělo by smysl odstranit řádek Sammy
z tabulky fish
.
DELETE
SQL příkaz odstranit řádek:
released_fish_name = "Sammy"cursor.execute( "DELETE FROM fish WHERE name = ?", (released_fish_name,))
problém DELETE
SQL příkaz odstranit řádek Sammy
shark
. WHERE
klauzule v DELETE
prohlášení zajišťuje, jsme jen odstranit řádek, pokud tento řádek name = "Sammy"
.,
Když jsme se spustit následující SELECT
prohlášení, můžeme potvrdit, že naše odstranění bylo provedeno správně:
rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)
Když jsme se spustit tento kód, uvidíme výstup jako následující:
Output
Všimněte si, že řádek Sammy
shark
je nyní pryč, a to pouze Jamie
cuttlefish
zůstává.,
5. Krok — Použití s příkazy Pro Automatické Vyčištění
V tomto výukovém programu, jsme použili dva základní objekty k interakci s "aquarium.db"
SQLite databáze: Connection
objekt s názvem connection
, a Cursor
objekt s názvem cursor
.
stejným způsobem, jakým by měly být soubory Pythonu uzavřeny, když s nimi pracujeme,Connection
aCursor
objekty by měly být také uzavřeny, pokud již nejsou potřeba.,
můžeme použít with
prohlášení, aby nám pomohli automaticky zavřít Connection
Cursor
objekty:
closing
je funkce pohodlí poskytována contextlib
modul. Když with
prohlášení východy, closing
zajišťuje, že close()
nazývá se na cokoliv, co objekt je předán. Funkce closing
se v tomto příkladu používá dvakrát., Jednou, aby zajistily, že Connection
objekt vrácený sqlite3.connect()
je automaticky uzavřen, a podruhé, aby zajistily, že Cursor
objekt vrácený connection.cursor()
je automaticky uzavřen.,
Když jsme se spustit tento kód, uvidíme výstup, jako je následující:
Output
, Protože "SELECT 1"
je příkaz SQL, který vždy vrací jeden řádek s jedním sloupcem s hodnotou 1
, to dává smysl, aby vidět jeden tuple 1
jako svou jedinou hodnotu vrácenou náš kód.
závěr
modulsqlite3
je výkonnou součástí standardní knihovny Python; umožňuje nám pracovat s plně funkční databází SQL na disku bez instalace dalšího softwaru.,
v tomto tutoriálu jsme se naučili používat modul sqlite3
pro připojení k databázi SQLite, přidání dat do této databáze a čtení a úpravy dat v této databázi. Podél cesty, jsme se také dozvěděli o riziku SQL injection útoky a jak používat contextlib.closing
automaticky volat close()
na Python objekty v with
prohlášení.
odtud se můžeme dozvědět více o databázích SQL v SQLite vs MySQL vs PostgreSQL: srovnání systémů pro správu relačních databází.