Johdanto

Tämä opetusohjelma kattaa käyttämällä SQLite yhdessä Pythonin sqlite3 käyttöliittymä. SQLite on yhden tiedoston relaatiotietokanta, joka on niputettu useimpiin tavallisiin Python-asennuksiin. SQLite on usein teknologian valinta pieniä sovelluksia, erityisesti sulautettujen järjestelmien ja laitteiden, kuten puhelimet ja tabletit, älykkäät laitteet ja välineet. Ei ole kuitenkaan harvinaista kuulla, että sitä käytetään pieniin ja keskisuuriin web-ja työpöytäsovelluksiin.,

Tietokannan Luomisen ja Yhteyden muodostaminen

Luo uusi SQLite-tietokanta on yhtä helppoa kuin luoda yhteys käyttää sqlite3 moduuli Python standard library. Muodostaa yhteyden kaikki mitä sinun tarvitsee tehdä, on siirtää tiedoston polku connect(...) menetelmä sqlite3 moduuli, ja jos tietokanta edustaa tiedostoa ei ole olemassa, sellainen luodaan tällä tiellä.,

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

löydät että jokapäiväisessä tietokanta ohjelmointi sinun tulee jatkuvasti luoda yhteyksiä tietokantaan, joten se on hyvä idea paketoida tämä yksinkertainen yhteys selvitys osaksi uudelleenkäytettäviä yleistynyt toiminto.

taulukoiden luominen

tietokantataulukoiden luomiseksi sinun on saatava käsitys niiden tietojen rakenteesta, joita olet kiinnostunut tallentamaan. On monia suunnittelunäkökohtia, jotka menevät määrittelemään taulukoita relaatiotietokannan, josta kokonaisia kirjoja on kirjoitettu., En lähde tämän käytännön yksityiskohtiin ja jätän sen sijaan lukijan tehtäväksi tutkia asiaa tarkemmin.

Kuitenkin, apua keskustelun SQLite tietokanta ohjelmointi Python aion työskennellä pois oletuksesta, että tietokanta on luotava fiktiivinen kirja-myymälä, joka on alla tietoa jo kerätään kirjan myynti.,

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

Kun tarkastus tämän tiedot, se on selvää, että se sisältää tietoja asiakkaista, tuotteista ja tilauksista. Yhteinen malli tietokannan suunnittelu kaupallisen järjestelmiin tämäntyyppisiä on rikkoa käskyjä kahteen ylimääräisiä taulukoita, tilauksia ja rivikohtia (joskus kutsutaan tilauksen tiedot) saavutetaan suurempi normalisointi.

Python-tulkkina samassa hakemistossa kuin db_utilit.,py-moduuli määritelty aiemmin, kirjoita SQL luoda asiakkaiden ja tuotteiden taulukot seuraavasti:

yllä Oleva koodi luo yhteyden kohteen ja sitten käyttää sitä instanssia kohdistin objektin. Kohdistinobjektia käytetään SQL-lausekkeiden suorittamiseen SQLite-tietokannassa.

kohdistin loi sitten kirjoitin SQL luoda asiakkaat-taulukko, jolloin se ensisijainen avain yhdessä ensimmäinen ja viimeinen nimi tekstikenttään ja liitä se muuttuja nimeltä customers_sql., En sitten soittaa execute(...) menetelmä kohdistin objektin kulkee sen customers_sql muuttuja. Sitten luon samalla tavalla tuotesarjan.

kysely sqlite_master taulukko, sisäänrakennettu SQLite-metadata-taulukko, haluat varmistaa, että edellä mainitut komennot olivat onnistuneita.

jos Haluat nähdä kaikki taulukot tällä hetkellä kytketty tietokantaan query name sarake sqlite_master taulukko, jossa type vastaa ”taulukko”.,

saada katsoa skeema taulukot kyselyn sql sarakkeessa on sama taulukko, jossa type on edelleen ”taulukko” ja name on yhtä kuin ”asiakkaita” ja/tai ”tuotteet”.

seuraava määriteltävä taulukko on tilaustaulukko, joka yhdistää asiakkaat tilauksiin ulkomaisen avaimen kautta ja ostopäivän. Koska SQLite ei tue todellinen päivämäärä/aika tiedot tyyppi (tai data-luokan olevan sopusoinnussa SQLite kansankielellä) kaikki päivämäärät tulee olla edustettuina tekstiä arvoja.,

lopputaulukko, joka määritellään, on rivi-erätaulukko, jossa esitetään tuotteiden yksityiskohtainen kirjanpito kussakin järjestyksessä.

Lastaus Tiedot

tässä osiossa aion osoittaa, miten LISÄTÄ meidän näyte tietoja taulukoiden juuri luonut. Luonnollinen lähtökohta olisi asuttamaan tuotteita pöydän ensin, koska ilman tuotteita ei voi olla myynti-ja näin ei olisi ulkomaisten avaimet liittyvät line tuotteet ja tilaukset., Tarkasteltaessa näytteen tiedot näen, että on olemassa neljä tuotteet:

työnkulun suorittamista INSERT lausuntoja on yksinkertaisesti:

  1. Yhteyden tietokantaan
  2. Luoda kohdistimen esine
  3. Kirjoita parametrisoitu insert SQL ja tallentaa muuttujan
  4. Soita suorita menetelmän kursori objektin kulkee sen sql-muuttuja ja arvot, tuple, lisätään taulukkoon

Koska tämä pääpiirteittäin olkaamme kirjoittaa lisää koodia.,

yllä oleva koodi vaikuttaa luultavasti melko ilmeiseltä, mutta anna minun keskustella siitä hieman, koska täällä on meneillään joitakin tärkeitä asioita. Insert julkilausuman seuraavat standardin SQL-syntaksi lukuun ottamatta ? bit. ?’s ovat todella paikkamerkkejä, mitä kutsutaan ”parametroituja kysely”.

Parametroituja kyselyt ovat tärkeä osa lähinnä kaikki tietokannan rajapintoja moderni korkean tason ohjelmointikieliä kuten sqlite3 moduuli Python., Tämäntyyppinen kysely parantaa useita kertoja toistuvien kyselyjen tehokkuutta. Ehkä vielä tärkeämpää, he myös puhdistaa tuloa, että ottaa paikka ? paikkamerkit, jotka välitetään puhelun aikana voit suorittaa menetelmä kohdistin objektin estää ilkeä tulot johtavat SQL-injektio. Seuraavassa on sarjakuva, suosittu xkcd.com blogi, jossa kuvataan vaaroista SQL-injektio.

kansoittavat loput taulukot aiomme seurata hieman erilaista mallia muuttaa asioita hieman., Työnkulun kunkin tilauksen, jonka tunnuksena on yhdistelmä asiakkaan ensimmäinen ja viimeinen nimi ja ostopäivämäärä on:

  1. Lisää uusi asiakas osaksi asiakkaat-taulukosta ja hakea sen ensisijaisen avaimen tunnus
  2. Luoda tilauksen merkintä perustuu pois asiakkaan tunnus ja ostopäivä sitten hakea sen ensisijaisen avaimen tunnus
  3. kunkin tuotteen, jotta voidaan määrittää sen perusavain id ja luoda rivikohdan merkintä liittämällä tilauksen ja tuote

Jotta asiat yksinkertaisempi itsellemme anna meidän tehdä nopeasti etsiä kaikki tuotteemme., Nyt älä murehdi liikaa mekaniikka valitse SQL lausuma, koska omistamme osan se pian.

ensimmäinen tilaus tehtiin Feb 22, 1944: Alan Turing, jotka ovat ostaneet Johdatus Combinatorics 7,99 dollaria.

Aloita tekemällä uusi asiakas ennätys, Herra Turing sitten määrittää hänen perusavain id avaamalla lastrowid alan kohdistin objektin.

nyt Voimme luoda tilauksen merkintä, kerätä uuden tilauksen id-arvo ja liittää se rivikohta merkintä, että tuotteen mukana Herra Turing määräsi.,

jäljellä Olevat tietueet ladataan täsmälleen sama lukuun ottamatta, jotta voidaan tehdä Donald Knuth, joka saa kaksi rivikohtaa merkinnät. Tällaisen tehtävän toistuva luonne kuitenkin vaatii, että nämä toiminnot on paketoitava uudelleenkäytettäviin toimintoihin. Vuonna db_utils.py moduuli lisää seuraava koodi:

Awh, nyt voimme työskennellä joitakin tehokkuus!

Sinun täytyy exit() Python-tulkki ja lataa se saada uusia toimintoja tulee saataville vuonna tulkki.,

tunnen tarvetta antaa vielä yksi neuvo ohjelmistokäsityön opiskelijana. Kun löydät itsesi tekee useita tietokanta manipulointia (Lisää tässä tapauksessa) jotta voidaan saavuttaa se, mitä on itse asiassa yksi kumulatiivinen tehtävä (eli luoda järjestyksessä) se on parasta kääri alitehtävät (luoda asiakkaan, tilauksen, sitten linja eriä) yhteen tietokantaan liiketoimi, joten voit joko sitoutua onnistumisen tai palautus, jos virhe ilmenee matkan varrella.,

Tämä näyttäisi jotenkin näin:

haluan lopettaa tämän osassa, jossa on nopea osoitus siitä, miten PÄIVITTÄÄ olemassa olevan tietokannan tietue. Päivitetäänpä novellien kirjoitusopas hintaan 10,99 (menossa myyntiin).

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

Kysely Tietokannassa

Yleisesti, yleisin toiminta suoritetaan tietokantaan on hakea joitakin tietoja tallennetaan sen kautta SELECT. Tässä osassa aion osoittaa, miten käyttää sqlite3-käyttöliittymää yksinkertaisten valittujen kyselyjen suorittamiseen.,

Voit suorittaa perus multirow kyselyn asiakkaiden taulukko ohitat SELECT execute(...) menetelmä kohdistin objektin. Tämän jälkeen voit kerrata kyselyn tulokset soittamalla fetchall() menetelmä sama kohdistin objektin.

Avulla sanoa haluat sen sijaan vain hakea yksi tietue tietokannasta. Voit tehdä tämän kirjoittamalla tarkempi kysely, sano Donald Knuth on id 2 ja seuraavat, että jopa soittamalla fetchone() menetelmä kohdistin objektin.,

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

Katso, miten yksittäiset rivillä kunkin tuloksen muodossa monikko? No vaikka tuples ovat erittäin hyödyllinen Pythonic tietorakenne joissakin ohjelmointikäytössä tapauksissa monet ihmiset pitävät niitä hieman esteenä, kun se tulee tehtävän tiedonhaun. Se vain tapahtuu niin, että on olemassa tapa edustaa tietoja tavalla, joka on ehkä joustavampi joillekin. Kaikki mitä sinun tarvitsee tehdä, on asettaa row_factory menetelmä yhteys vastustaa jotain sopivaa, esimerkiksi sqlite3.Row., Tämä antaa sinulle mahdollisuuden käyttää rivin yksittäisiä kohteita sijainnin tai avainsanan arvon mukaan.

Johtopäätös

tässä artikkelissa annoin lyhyen esittelyn siitä, mitä tunnen, ovat tärkeimmät ominaisuudet ja toiminnot sqlite3 Python-rajapinta on kevyt yhden tiedoston SQLite-tietokanta, joka tulee valmiiksi yhdistetty useimmat Python asentuu., Olen myös yrittänyt antaa muutaman bittiä neuvoja, jotka koskevat parhaita käytäntöjä, kun se tulee tietokanta, ohjelmointi, mutta en varovaisuutta uusi tulija joka koukerot tietokanta ohjelmointi on yleensä yksi eniten altis tietoturva-aukkoja yrityksen tasolla ja edelleen tieto on välttämätöntä ennen kuin tällainen yritys.