kirjoittaja valittu COVID-19 Helpotus Rahasto vastaanottaa lahjoituksen osana Kirjoittaa Lahjoituksia ohjelma.
Johdanto
SQLite on itsenäinen, tiedostopohjainen SQL-tietokanta. SQLite mukana tulee Python ja voidaan käyttää minkä tahansa Python sovelluksia ilman asentaa mitään lisäohjelmia.
tässä opetusohjelmassa, me mennä läpi sqlite3
moduuli Python 3., Luomme yhteyden SQLite-tietokantaan, lisätä taulukon tietokantaan, lisätä tietoja taulukon ja lukea ja muokata tietoja taulukossa.
tätä opetussuunnitelmaa varten teemme ensisijaisesti inventaariota kaloista, joita meidän on muokattava, kun kalat lisätään tai poistetaan kuvitteellisesta akvaariosta.
Esitiedot
saat kaiken irti tämän opetusohjelman, se on suositeltavaa joitakin perehtyneisyys ohjelmointi Python ja jotkut perus tausta SQL.,
Voit tarkistaa nämä tutorials tarvittavat taustatiedot:
- Miten Koodia Python3
- Johdatus Kyselyitä MySQL
Vaihe 1 — Luo Yhteyden SQLite-Tietokanta
Kun yhteyden SQLite-tietokantaan, meillä on pääsy tietoihin, että viime kädessä asuu tiedosto, meidän tietokone. SQLite-tietokannat ovat täysin varusteltuja SQL-moottoreita, joita voidaan käyttää moniin tarkoituksiin. Toistaiseksi harkitsemme tietokantaa, joka seuraa kalojen inventointia kuvitteellisessa akvaariossa.,
Emme voi muodostaa yhteyden SQLite tietokanta käyttäen Python sqlite3
moduuli:
import sqlite3connection = sqlite3.connect("aquarium.db")
import sqlite3
antaa meidän Python-ohjelma, pääsy sqlite3
moduuli. sqlite3.connect()
funktio palauttaa Connection
kohde, että käytämme vuorovaikutuksessa SQLite tietokanta järjestetään tiedosto aquarium.db
. aquarium.db
tiedosto luodaan automaattisesti sqlite3.connect()
jos aquarium.db
ei ole olemassa meidän tietokone.,
Voimme tarkistaa olemme onnistuneesti luoneet connection
objekti käynnissä:
print(connection.total_changes)
Jos me suorittaa tämän Python-koodia, voimme nähdä, tuotos, kuten:
Output0
connection.total_changes
on yhteensä useita tietokannan rivit, jotka on muutettu connection
. Koska SQL-komentoja ei ole vielä toteutettu, 0 total_changes
pitää paikkansa.
jos löydämme milloin tahansa, että haluamme aloittaa tämän opetusohjelman uudelleen, voimme poistaa aquarium.db
– tiedoston tietokoneeltamme.,
Huom: on myös mahdollista muodostaa yhteyden SQLite-tietokantaan, joka sijaitsee tiukasti muistissa (ei tiedosto), joita kulkee erityinen string ":memory:"
sqlite3.connect()
. Esimerkiksi sqlite3.connect(":memory:")
. ":memory:"
SQLite tietokanta katoaa heti, kun Python ohjelma poistuu. Tämä voi olla kätevää, jos haluat väliaikaisen hiekkalaatikon kokeilla jotain SQLite, ja ei tarvitse pitää tietoja jälkeen ohjelma poistuu.,
Vaihe 2 — Lisäämällä Tiedot SQLite Tietokanta
Nyt meillä on kytketty aquarium.db
SQLite tietokanta, voimme aloittaa lisäämällä ja lukea tietoja siitä.
SQL-tietokannassa tiedot tallennetaan taulukoihin. Taulukot määrittelevät joukon sarakkeita ja sisältävät 0 tai useampia rivejä, joissa on tiedot kustakin määritellystä sarakkeesta., taulukko nimetty fish
, joka seuraa seuraavat tiedot:
nimi | lajit | tank_number |
---|---|---|
Sammy | hai | 1 |
Jamie | mustekala | 7 |
fish
taulukko seurata arvo name
, species
ja tank_number
kunkin kala akvaariossa., 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 ..."
string on SQL, joka luo taulukon nimeltä fish
kolme saraketta kuvattu aiemmin: name
tyyppi TEXT
, laji, tyyppi TEXT
, ja tank_number
tyyppi INTEGER
.,
Nyt, että olemme luoneet taulukon, voimme lisätä riviä tietoja siihen:
cursor.execute("INSERT INTO fish VALUES ('Sammy', 'shark', 1)")cursor.execute("INSERT INTO fish VALUES ('Jamie', 'cuttlefish', 7)")
kutsumme cursor.execute()
kaksi kertaa: kerran, kun haluat lisätä rivin hain Sammy
säiliö 1
, ja kun haluat lisätä rivin mustekala Jamie
säiliö 7
. "INSERT INTO fish VALUES ..."
on SQL-lauseke, jonka avulla taulukkoon voi lisätä rivejä.,
seuraavassa osassa, aiomme käyttää SQL – SELECT
selvitys tarkastaa rivit, me vain työnnetään meidän fish
taulukko.
Vaihe 3 — Käsittely Tietoja SQLite Tietokanta
Vaihe 2 on lisätty kaksi riviä SQLite-taulun nimeltä fish
., Voimme noutaa ne rivit käyttäen SELECT
SQL-lause:
rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)
Jos otamme tämän koodin, me katso tuotos, kuten seuraavat:
Output
cursor.execute()
toimii SELECT
selvitys hakea arvot name
, species
, ja tank_number
sarakkeita fish
taulukko. fetchall()
hakee kaikki tulokset SELECT
lausunto., When we we see a list of two tuples. Jokaisella tuplella on kolme merkintää; yksi merkintä jokaiselle kolonnille, jonka valitsimme fish
taulukosta. Kaksi tuplat on tiedot meidän lisätään Vaihe 2: yksi monikko varten Sammy
shark
, ja yksi monikko varten Jamie
cuttlefish
.,
Jos halusimme hakea rivit fish
taulukko, jotka vastaavat tiettyjä kriteerejä, voimme käyttää WHERE
lauseke:
Jos me suorittaa tämän, näemme tuotos, kuten seuraavat:
Output
Kuten edellinen esimerkki, cursor.execute(<SQL statement>).fetchall()
avulla voimme noutaa kaikki tulokset SELECT
lausunto. WHERE
lauseke SELECT
selvitys suodattimet rivit, joissa arvo name
on target_fish_name
., Huomaa, että käytämme ?
korvata meidän target_fish_name
muuttuja osaksi SELECT
lausunto. Odotamme yhdistää vain yksi rivi, ja todellakin me vain nähdä rivi Jamie
cuttlefish
palasi.
Varoitus: Älä koskaan käytä Python string operations dynaamisesti luoda SQL statement merkkijono. Python string-toimintojen käyttäminen SQL statement string-merkkijonon kokoamiseen tekee sinusta haavoittuvan SQL injection-hyökkäyksille. SQL-pistoskohtauksia voidaan käyttää varastamaan, muuttamaan tai muuten muokkaamaan tietokantaasi tallennettuja tietoja., Käytä aina ?
paikkamerkki teidän SQL dynaamisesti korvaavien arvojen teidän Python ohjelma. Pass monikko arvoja kuin toinen argumentti Cursor.execute()
sitomaan arvoja SQL-lause. Tämä korvaaminen kuvio on osoitettu täällä ja muissa osissa tämän opetusohjelman samoin.
Vaihe 4 — Muuttamalla Tiedot SQLite Tietokanta
Rivit SQLite-tietokanta voidaan muokata käyttämällä UPDATE
ja DELETE
SQL lausuntoja.,
sanotaan esimerkiksi, että Sammy hai siirrettiin panssarivaunuun numero 2. Voimme muuttaa Sammyn rivi fish
taulukko heijastaa tätä muutosta:
antaa UPDATE
SQL muuttaa tank_number
ja Sammy
sen uusi arvo 2
. WHERE
lauseke UPDATE
lausunto varmistaa me vain muuttaa arvoa tank_number
jos rivi on name = "Sammy"
.,
Jos me suorita seuraava SELECT
julkilausuman, voimme vahvistaa, että päivitys oli tehty oikein:
rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)
Jos me suorittaa tämän, näemme tuotos, kuten seuraavat:
Output
Huomaa, että rivi Sammy
nyt on arvo 2
sen tank_number
sarake.
sanotaan, että Sammy hai päästettiin luontoon, eikä se enää ollut akvaarion hallussa., Koska Sammy ei enää asuu akvaariossa, se olisi järkevää poistaa Sammy
rivin fish
taulukko.
Asia DELETE
SQL poistaa rivin:
released_fish_name = "Sammy"cursor.execute( "DELETE FROM fish WHERE name = ?", (released_fish_name,))
asia DELETE
SQL poista rivi Sammy
shark
. WHERE
lauseke DELETE
selvitys varmistetaan, me vain poistaa rivin, jos rivi on name = "Sammy"
.,
Jos me suorita seuraava SELECT
julkilausuman, voimme vahvistaa meidän poisto oli tehty oikein:
rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)
Jos otamme tämän koodin, me katso tuotos, kuten seuraavat:
Output
Huomaa, että rivi Sammy
shark
on nyt poissa, ja vain Jamie
cuttlefish
pysyy.,
Vaihe 5 — Käyttämällä Lausuntoja Automaattinen Uudelleenjärjestäminen
tämä opetusohjelma olemme käyttäneet kaksi ensisijainen esineitä vuorovaikutuksessa "aquarium.db"
SQLite tietokanta: Connection
objekti nimeltä connection
, ja Cursor
objekti nimeltä cursor
.
samalla tavalla, että Python-tiedostot pitäisi olla kiinni, kun olemme tehneet työtä niiden kanssa, Connection
ja Cursor
objektit pitäisi myös sulkea, kun niitä ei enää tarvita.,
voidaan käyttää with
ilmoitus auttaa meitä automaattisesti sulje Connection
ja Cursor
objektit:
closing
on mukavuutta toiminto esittänyt contextlib
moduuli. Kun with
ilmoitus poistuu, closing
takaa close()
kutsutaan mitä tahansa esine on kulunut. Tässä esimerkissä käytetään kahdesti closing
– funktiota., Kerran varmistaa, että Connection
objekti palautetaan sqlite3.connect()
on automaattisesti suljettu, ja toisen kerran varmistaa, että Cursor
objekti palautetaan connection.cursor()
sulkeutuu automaattisesti.,
Jos otamme tämän koodin, me katso tuotos, kuten seuraavat:
Output
Koska "SELECT 1"
on SQL-lause, joka palauttaa aina yhden rivin, jossa on yksi sarake, jonka arvo on 1
, on järkevää nähdä yhden monikko 1
sen ainoa arvo palasi meidän koodi.
Johtopäätös
sqlite3
moduuli on tehokas osa Python standardin kirjasto; se antaa meille mahdollisuuden työskennellä täysin varustellun levyllä SQL-tietokantaan ilman mitään lisäohjelmia.,
tässä opetusohjelmassa, me opimme, miten käyttää sqlite3
moduuli yhteyden SQLite-tietokantaan, lisätä tietoja tietokantaan, sekä lukea ja muokata tietoja tietokantaan. Matkan varrella, olemme myös oppineet, riskeistä SQL-injektio hyökkäyksiä ja miten käyttää contextlib.closing
automaattisesti soittaa close()
käytössä Python esineitä with
lausunnot.
tästä voimme oppia lisää SQL-tietokannat, SQLite vs MySQL vs. PostgreSQL: Vertaamalla relaatiotietokantojen hallintajärjestelmiä.