Jak Pomocí sqlite3 Modul Pythonu 3

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:

Output
0

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í.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Přejít k navigační liště