Úvod

tento tutoriál bude pokrývat pomocí SQLite v kombinaci s rozhraním Python sqlite3. SQLite je jeden soubor relační databáze svázaný s většinou standardních Python nainstaluje. SQLite je často technologie výběru pro malé aplikace, zejména pro vestavěné systémy a zařízení, jako jsou telefony a tablety, inteligentní spotřebiče a nástroje. Není však neobvyklé slyšet, že se používá pro malé až střední webové a stolní aplikace.,

Vytvoření Databáze a Připojení

Vytvoření nové databáze SQLite je stejně jednoduché jako vytvoření připojení pomocí sqlite3 modul v jazyce Python standardní knihovny. Pro navázání spojení vše, co musíte udělat, je projít cestu k souboru do connect(...) metoda v sqlite3 modul, a pokud je v databázi reprezentován soubor neexistuje, bude vytvořen na té cestě.,

import sqlite3con = sqlite3.connect('/path/to/file/db.sqlite3')

zjistíte, že v každodenním programování databáze bude neustále vytvářet spojení do databáze, takže je to dobrý nápad, zabalit to jednoduché připojení prohlášení do opakovaně použitelných zobecněné funkce.

vytváření tabulek

Chcete-li vytvořit databázové tabulky, musíte mít představu o struktuře dat, která Vás zajímají. Existuje mnoho designových úvah, které jdou do definování tabulek relační databáze, o kterých byly napsány celé knihy., Nebudu se zabývat podrobnostmi této praxe a místo toho nechám na čtenáři, aby to dále prozkoumal.

Nicméně, na pomoc v naší diskusi o SQLite databáze programování s Python budu pracovat z předpokladu, že databáze musí být vytvořeny pro fiktivní knihkupectví, které má níže uvedené údaje již shromážděné na prodej knih.,

customer date product price
Alan Turing 2/22/1944 Introduction to Combinatorics 7.99
Donald Knuth 7/3/1967 A Guide to Writing Short Stories 17.99
Donald Knuth 7/3/1967 Data Structures and Algorithms 11.99
Edgar Codd 1/12/1969 Advanced Set Theory 16.,99

Po kontrole těchto údajů je patrné, že obsahuje informace o zákazníky, produkty a objednávky. Společný vzor v návrhu databáze pro transakční systémy tohoto typu jsou porušit rozkazy do dvou dalších tabulek, objednávek a řádkových položek (někdy označované jako podrobnosti objednávky), aby bylo dosaženo větší normalizace.

v interpretu Pythonu, ve stejném adresáři jako db_utils.,py modul definován dříve, zadejte SQL pro vytvoření zákazníky a produkty tabulky takto:

výše uvedený kód vytvoří objekt připojení pak používá k instanci kurzoru objekt. Objekt kurzoru se používá k provádění příkazů SQL v databázi SQLite.

S kurzorem vytvořil jsem pak napsal SQL vytvořit tabulku zákazníci, což je primární klíč spolu s první a poslední jméno textové pole a přiřadit do proměnné s názvem customers_sql., Pak jsem zavolat execute(...) metoda kurzoru objekt procházející customers_sql proměnné. I pak vytvořit tabulku produktů podobným způsobem.

můžete dotazovat tabulkusqlite_master, vestavěnou tabulku metadat SQLite, abyste ověřili, že výše uvedené příkazy byly úspěšné.

podívejte se na všechny tabulky v aktuálně připojené databáze dotazu name sloupce sqlite_master tabulku, kde type je rovno „tabulka“.,

podívejte se na schéma tabulek dotazu sql sloupce stejné tabulky, kde type je stále „tabulka“ a name je rovno „zákazníky“ a/nebo „výrobky“.

následující tabulka, kterou je třeba definovat, bude tabulka objednávek, která sdružuje zákazníky k objednávkám prostřednictvím cizího klíče a datum jejich nákupu. Od SQLite nepodporuje skutečné datum/čas datový typ (nebo data třídy, které mají být v souladu s SQLite lidový) všechna data budou reprezentovány jako textové hodnoty.,

konečná tabulka, kterou chcete definovat, bude tabulka položek řádku, která poskytuje podrobné účetnictví produktů v každé objednávce.

načítání dat

v této části budu demonstrovat, jak vložit naše vzorová data do právě vytvořených tabulek. Přirozeným výchozím místem by bylo nejprve naplnit tabulku produktů, protože bez produktů nemůžeme mít prodej, a proto bychom neměli cizí klíče, které by se vztahovaly k položkám a objednávkám linky., Při pohledu na vzorku dat vidím, že tam jsou čtyři produkty:

workflow pro vykonávající příkazy INSERT je jednoduše:

  1. Připojení k databázi
  2. Vytvořit kurzor na objekt
  3. Napište parametrické li vložit příkaz SQL a uložit jako proměnnou
  4. Volání execute metoda na objekt kurzor předávání sql proměnné a hodnoty, jako n-tice, vloží do tabulky

Vzhledem k této obecné osnovy, dejte nám napsat nějaký další kód.,

výše uvedený kód se pravděpodobně zdá být docela zřejmý, ale dovolte mi to trochu diskutovat, protože se zde děje několik důležitých věcí. Příkaz insert se řídí standardní syntaxí SQL s výjimkou bitů ?. ?‚s jsou vlastně zástupné symboly v tom, co je známé jako“parametrizovaný dotaz“.

parametrizované dotazy jsou důležitou vlastností v podstatě všech databázových rozhraní pro moderní programovací jazyky na vysoké úrovni, jako je modul sqlite3 v Pythonu., Tento typ dotazu slouží ke zlepšení efektivity dotazů, které se opakují několikrát. Možná ještě důležitější, oni také dezinfikovat vstupy, které se místo ? zástupné symboly, které jsou předávány v průběhu volání metody execute kurzor na objekt, aby se zabránilo zločinný vstupů vedoucí k SQL injection. Následuje komiks od populární xkcd.com blog popisující nebezpečí SQL injekce.

naplnit zbývající tabulky budeme postupovat mírně odlišném změnit věci trochu., Workflow pro jednotlivé objednávky, které lze identifikovat podle kombinace zákazník jméno a příjmení a datum nákupu, bude:

  1. Vložení nového zákazníka do tabulky zákazníci a získat jeho primární klíč id
  2. Vytvořit objednávku vstupu vychází z id zákazníka a datum nákupu pak získat jeho primární klíč id
  3. Pro každou položku v pořadí, určit jeho primární klíč id a vytvořit řádkové položky položka příponu objednávky a produktu

Aby se věci jednodušší na sebe pojďme rychle podívejte se na všechny naše produkty., Prozatím se příliš nemusíte starat o mechaniku příkazu SELECT SQL, protože mu brzy věnujeme sekci.

první objednávka byla zadána 22. února 1944 Alanem Turingem, který zakoupil Úvod do kombinatoriky za $7.99.

Začněte vytvořením nového zákaznického záznamu pro pana Turinga a poté určete jeho id primárního klíče přístupem do polelastrowid objektu kurzoru.

nyní můžeme vytvořit položku objednávky, shromáždit novou hodnotu ID objednávky a přiřadit ji k položce řádku spolu s objednaným produktem Mr. Turing.,

zbývající záznamy jsou načteny přesně stejně, s výjimkou objednávky provedené Donaldu Knuthovi,který obdrží dvě položky řádku. Opakovaná povaha takového úkolu však vyvolává potřebu zabalit tyto funkce do opakovaně použitelných funkcí. V db_utils.py modul přidat následující Kód:

Awh, nyní můžeme pracovat s určitou účinností!

budete muset exit() tlumočník Pythonu a znovu jej načíst, aby se vaše nové funkce staly dostupnými v tlumočníkovi.,

cítím se nucen dát jednu další radu jako student softwarového řemesla. Když jste najít sami dělat více databáze manipulace (Vloží v tomto případě) s cílem dosáhnout toho, co je ve skutečnosti jedním kumulativní úkol (tj. vytvoření objednávky), to je nejlepší zabalit dílčí úkoly (vytvoření zákazníka, pořadí, pak řádkové položky) do jedné databáze, transakce, takže si můžete buď spáchat na úspěch, nebo vrácení zpět, pokud dojde k chybě po cestě.,

to by vypadalo takto:

chci dokončit tuto sekci rychlou ukázkou toho, jak aktualizovat existující záznam v databázi. Aktualizujeme průvodce psaním povídek na cenu 10.99 (v prodeji).

>>> update_sql = "UPDATE products SET price = ? WHERE id = ?">>> cur.execute(update_sql, (10.99, 2))

Dotazování Databáze

Obecně nejčastější akce prováděné na databázi je načítání některých dat uložených v to přes SELECT. V této části budu demonstrovat, jak používat rozhraní sqlite3 k provádění jednoduchých vybraných dotazů.,

Chcete-li provést základní vícenásobný dotaz tabulky zákazníků, předáte příkaz SELECT metodě execute(...) objektu kurzoru. Poté můžete iterovat výsledky dotazu voláním metody fetchall() stejného objektu kurzoru.

Řekněme, že byste chtěli místo toho načíst jeden záznam z databáze. Můžete to udělat tím, že psaní konkrétnější dotaz, řekněme pro Donald Knuth je id 2, a po které se zavoláním fetchone() metoda kurzoru objekt.,

>>> cur.execute("SELECT id, first_name, last_name FROM customers WHERE id = 2")>>> result = cur.fetchone()>>> print(result)(2, 'Donald', 'Knuth')

podívejte se, jak je jednotlivé řádky každého výsledku ve formě Tice? Zatímco tuples jsou velmi užitečnou Pythonickou datovou strukturou pro některé případy programování, mnoho lidí je považuje za trochu překážející, pokud jde o úkol vyhledávání dat. Stává se tak, že existuje způsob, jak reprezentovat data způsobem, který je pro některé možná flexibilnější. Vše, co musíte udělat, je nastavit row_factory způsob připojení objektu na něco vhodnější, například sqlite3.Row., To vám umožní přístup k jednotlivým položkám řádku podle polohy nebo hodnoty klíčového slova.

závěr

v tomto článku jsem dal stručnou ukázku toho, co cítím, jsou nejdůležitější funkce a funkce rozhraní sqlite3 Python do lehké databáze single file SQLite, která je dodávána předem s většinou instalací Pythonu., Také jsem se snažil dát několik kousků rady týkající se osvědčených postupů, pokud jde o databáze, programování, ale mám upozornění na nový příchozí, který složitosti databáze programování je obecně jedním z nejvíce náchylné na bezpečnostní díry na úrovni podniku a dále znalosti je nutné před takovým podnikem.