Bevezetés

Ez a bemutató fedezi segítségével SQLite kombinálva Python sqlite3 interfész. SQLite egy fájl relációs adatbázis csomagban a legtöbb szabványos Python telepíti. SQLite gyakran a technológia a választás a kis alkalmazások, különösen a beágyazott rendszerek, eszközök, mint a telefonok, táblagépek, okos készülékek, eszközök. Nem ritka azonban, hogy kis-és közepes méretű webes és asztali alkalmazásokhoz használják.,

adatbázis létrehozása és kapcsolat létrehozása

egy új SQLite adatbázis létrehozása olyan egyszerű, mint egy kapcsolat létrehozása az sqlite3 modullal a Python standard könyvtárban. A kapcsolat létrehozásához mindössze annyit kell tennie, hogy átadja a fájl elérési útját aconnect(...) metódusnak az sqlite3 modulban, és ha a fájl által képviselt adatbázis nem létezik, akkor az adott útvonalon jön létre.,

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

meg fogja találni, hogy a mindennapi adatbázis-programozásban folyamatosan kapcsolatokat hoz létre az adatbázisával, ezért jó ötlet ezt az egyszerű csatlakozási nyilatkozatot újrafelhasználható általános funkcióba csomagolni.

táblázatok létrehozása

adatbázistáblák létrehozásához el kell ismernie az adatok tárolását. Számos tervezési megfontolás merül fel egy relációs adatbázis táblázatainak meghatározásakor, amelyekről egész könyveket írtak., Nem fogok belemenni ennek a gyakorlatnak a részleteibe, hanem inkább az olvasóra hagyom, hogy tovább vizsgálja.

azonban, hogy segítse a vita SQLite adatbázis programozás Python fogok dolgozni ki a feltevést, hogy egy adatbázist kell létrehozni egy fiktív könyvesbolt, amely az alábbi adatokat már összegyűjtött könyv értékesítés.,

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

ezen adatok ellenőrzésekor nyilvánvaló, hogy információkat tartalmaz az ügyfelekről, termékekről és megrendelésekről. Az ilyen típusú tranzakciós rendszerek adatbázis-tervezésének közös mintája az, hogy a megrendeléseket két további táblára, megrendelésre és sortételre (néha rendelési részletekre) bontják a nagyobb normalizálás elérése érdekében.

egy Python értelmezőben, ugyanabban a könyvtárban, mint a db_utils.,Py modul korábban definiált, írja be az SQL létrehozására az ügyfelek és termékek táblázatok következő:

a fenti kód létrehoz egy kapcsolat objektumot, majd használja, hogy példányosítsa a kurzor objektumot. A kurzorobjektum az SQL utasítások végrehajtására szolgál az SQLite adatbázisban.

a kurzor létre aztán írta az SQL, hogy hozzon létre az ügyfelek tábla, így ez egy elsődleges kulcs mellett egy első és vezetéknév szövegmezőt, és hozzá, hogy egy változó nevű customers_sql., Ezután a kurzor objektum execute(...) metódusát hívom, amely átadja a customers_sql változónak. Ezután hasonló módon készítek egy terméktáblát.

lekérdezheti asqlite_master táblát, egy beépített SQLite metaadat táblát, hogy ellenőrizze, hogy a fenti parancsok sikeresek voltak-e.

az aktuálisan összekapcsolt adatbázis lekérdezés összes táblázatának megtekintéséhez a name sqlite_master táblázat oszlopa, ahol a type egyenlő a “táblázattal”.,

a táblázatok sémájának áttekintéséhez a sql oszlopot kell megadni ugyanannak a táblázatnak, ahol a type még mindig “táblázat” és a name egyenlő az “ügyfelekkel” és/vagy “termékekkel”.

a következő meghatározandó táblázat a megrendelési táblázat lesz, amely az ügyfeleket külföldi kulcson keresztül rendeli meg, valamint a vásárlás dátumát. Mivel az SQLite nem támogatja a tényleges dátum / idő adattípust (vagy az adatosztályt, hogy összhangban legyen az SQLite népi nyelvvel), minden Dátum szöveges értékként jelenik meg.,

a végső táblázat határozza meg lesz a sor tételek táblázat, amely részletes elszámolása a termékek minden sorrendben.

az adatok betöltése

ebben a szakaszban bemutatom, hogyan lehet a mintaadatokat beilleszteni az éppen létrehozott táblázatokba. A természetes kiindulópont az lenne, ha először a terméktáblát töltenénk fel, mert termékek nélkül nem lehet értékesíteni, így nem rendelkeznénk a külföldi kulcsokkal a sortételekhez és a megrendelésekhez., Nézi a minta adatok látom, hogy négy termékek:

a munkafolyamat A végrehajtó HELYEZZE be a kijelentések egyszerűen:

  1. Kapcsolódás az adatbázishoz
  2. hozzon Létre egy kurzor objektum
  3. Írj egy kódokat insert SQL utasítás is a boltban, mint egy változó
  4. Hívás végrehajtása módszer a kurzor objektum halad az sql változó értékek, mint egy vektor, kell illeszteni a táblázat

Mivel ez az általános vázlat írjunk még néhány kódot.,

a fenti kód valószínűleg elég nyilvánvalónak tűnik,de hadd beszéljek egy kicsit, mivel itt vannak néhány fontos dolog. Az insert utasítás a standard SQL szintaxist követi, kivéve a ? bitet. A ? “s valójában helyőrzők az úgynevezett “paraméterezett lekérdezés”.

paraméterezett lekérdezések fontos jellemzője lényegében az összes adatbázis interfészek modern magas szintű programozási nyelvek, mint például a sqlite3 modul Python., Ez a fajta lekérdezés a többször megismételt lekérdezések hatékonyságának javítására szolgál. Talán ennél is fontosabb, azt is fertőtlenítse bemenetek, hogy a hely, az ? helyőrzők, amelyek telt el közben a hívás, hogy a végrehajtás módja a kurzor célja az, hogy megakadályozza aljas bemenetek vezető SQL injekciós. A következő egy képregény a népszerű xkcd.com blog leírja a veszélyeket SQL injekció.

a fennmaradó táblák feltöltéséhez kissé eltérő mintát követünk, hogy kicsit megváltoztassuk a dolgokat., A munkafolyamat minden annak érdekében, amelyeket egy kombináció, a vásárló nevét, a vásárlás dátuma, lesz:

  1. Helyezze be az új ügyfél a vásárlók táblázat letöltése elsődleges kulcs id
  2. megrendelés készítése bejegyzés alapján le az ügyfél-azonosítóját, illetve a vásárlást követő majd letölteni az elsődleges kulcs id
  3. minden egyes termék a megrendelés meghatározni az elsődleges kulcs azonosítóját, majd hozzon létre egy tételt bejegyzés összekapcsolni a megrendelés a termék

Hogy a dolgok egyszerűbbek a magunk tegyünk egy gyors pillantást fel az összes termék., Most ne aggódj túl sokat a SELECT SQL utasítás mechanikájával kapcsolatban, mivel hamarosan egy szakaszt szentelünk neki.

Az első megrendelést 1944.február 22-én adta le Alan Turing, aki 7,99 dollárért vásárolta meg a Kombinatorikát.

Kezdje azzal, hogy új ügyfélrekordot készít Mr. Turing számára, majd határozza meg elsődleges kulcsazonosítóját a kurzor objektum lastrowid mezőjének elérésével.

most már létrehozhatunk egy rendelésbejegyzést, összegyűjthetjük az új rendelésazonosító értéket, és hozzárendelhetjük egy sorelem-bejegyzéshez a megrendelt termékkel együtt.,

a fennmaradó rekordok pontosan ugyanúgy vannak betöltve, kivéve a Donald Knuth-nak tett megrendelést, amely két sortétel-bejegyzést kap. Egy ilyen feladat ismétlődő jellege azonban arra utal, hogy ezeket a funkciókat újrafelhasználható funkciókba kell csomagolni. A db_utils.py modul adja hozzá a következő kódot:

Awh, most már bizonyos hatékonysággal dolgozhatunk!

meg kell exit() A Python tolmács, majd töltse újra, hogy az új funkciók hozzáférhetővé válnak a tolmács.,

úgy érzem, hogy még egy tanácsot kell adnom a szoftvergyártás hallgatójaként. Ha úgy találja, hogy több adatbázis-manipulációt végez (ebben az esetben beilleszti) annak érdekében, hogy megvalósítsa azt, ami valójában egy halmozott feladat (azaz megrendelés létrehozása), akkor a legjobb, ha a részfeladatokat (ügyfél, megrendelés, majd sorelemek létrehozása) egyetlen adatbázis-tranzakcióba csomagolja, így sikeres vagy visszavonható, ha hiba történik az út mentén.,

Ez így néz ki:

szeretném befejezni ezt a részt egy gyors bemutatással arról, hogyan lehet frissíteni egy meglévő rekordot az adatbázisban. Frissítsük a novellák árának írására vonatkozó útmutatót 10.99-re (eladó).

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

az adatbázis lekérdezése

általában az adatbázisban végzett leggyakoribb művelet a benne tárolt adatok egy kiválasztott nyilatkozaton keresztül történő lekérdezése. Ehhez a szakaszhoz bemutatom, hogyan kell használni az sqlite3 felületet egyszerű lekérdezések végrehajtásához.,

az ügyféltáblázat alapvető többsoros lekérdezésének végrehajtásához a kurzorobjektum execute(...) metódusához adja át a kiválasztott nyilatkozatot. Ezután iterálhatja a lekérdezés eredményeit, ha ugyanazon kurzorobjektum fetchall() metódusát hívja.

tegyük fel, hogy inkább csak egy rekordot szeretne letölteni az adatbázisból. Ezt úgy teheti meg, hogy egy konkrétabb lekérdezést ír, mondjuk Donald Knuth 2-es azonosítójára, majd ezt követően hívja a fetchone() kurzorobjektum módszerét.,

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

nézze meg, hogy az egyes eredmények egyes sorai tuple formájában vannak? Nos, míg a tuples egy nagyon hasznos Pythonic adatstruktúra egyes programozási felhasználási esetekben sokan találják őket egy kicsit akadályozza, amikor a feladat az adat visszakeresés. Csak úgy történik, hogy van egy módja annak, hogy az adatokat olyan módon ábrázolják, amely egyesek számára talán rugalmasabb. Mindössze annyit kell tennie, hogy a row_factory módszer a kapcsolat objektum valami alkalmasabb, mint például a sqlite3.Row., Ez lehetővé teszi a sor egyes elemeinek elérését pozíció vagy kulcsszó érték szerint.

következtetés

ebben a cikkben röviden bemutattam, hogy mit érzek az sqlite3 Python felület legfontosabb jellemzői és funkciói a könnyű egyetlen fájl SQLite adatbázishoz, amely a legtöbb Python telepítéshez tartozik., Megpróbáltam néhány tanácsot adni a legjobb gyakorlatokkal kapcsolatban az adatbázis-programozással kapcsolatban, de óvatosan figyelmeztetem az újonnan érkezőket, hogy az adatbázis-programozás bonyolultsága általában az egyik leginkább hajlamos a vállalati szintű biztonsági lyukakra, és további ismeretekre van szükség egy ilyen vállalkozás előtt.