a szerző kiválasztotta a COVID-19 segélyalapot, hogy adományt kapjon az adományok írása program részeként.
Bevezetés
az SQLite egy önálló, fájl alapú SQL adatbázis. SQLite jön csomagban Python használható bármely Python alkalmazások telepítése nélkül bármilyen további szoftvert.
ebben az oktatóanyagban a sqlite3
modult a Python 3-ban., Létrehozunk egy kapcsolatot egy SQLite adatbázissal, hozzáadunk egy táblázatot az adatbázishoz, adatokat helyezünk be a táblázatba, majd elolvasjuk és módosítjuk az adatokat a táblázatban.
ehhez a bemutatóhoz elsősorban a halak leltárával fogunk dolgozni, amelyeket módosítani kell, mivel a halakat hozzáadják vagy eltávolítják egy kitalált akváriumból.
előfeltételek
ahhoz, hogy a legtöbbet hozza ki ebből az oktatóanyagból, javasoljuk, hogy legyen némi ismerete a Python programozásában, valamint néhány alapvető háttér az SQL-vel.,
áttekintheti ezeket az oktatóanyagokat a szükséges háttérinformációkhoz:
- hogyan kell kódolni Python3
- a MySQL
1. lépés-kapcsolat létrehozása egy SQLite adatbázishoz
amikor csatlakozunk egy SQLite adatbázishoz, olyan adatokhoz férünk hozzá, amelyek végül a számítógépünkön található fájlban találhatók. SQLite adatbázisok teljes funkcionalitású SQL motorok, hogy lehet használni számos célra. Most egy olyan adatbázist fogunk megvizsgálni, amely nyomon követi a halak leltárát egy kitalált akváriumban.,
csatlakozhatunk egy SQLite adatbázishoz a Python sqlite3
modul:
import sqlite3connection = sqlite3.connect("aquarium.db")
import sqlite3
hozzáférést biztosít a Python programunkhoz a sqlite3
modulhoz. Asqlite3.connect()
függvény a Connection
objektumot adja vissza, amelyet a aquarium.db
fájlban található SQLite adatbázissal való interakcióhoz használunk. Aaquarium.db
fájl automatikusan jön létre asqlite3.connect()
haaquarium.db
még nem létezik a számítógépünkön.,
ellenőrizni Tudjuk sikeresen létre a connection
objektum által fut:
print(connection.total_changes)
Ha ez a Python kódot, látni fogjuk, kimeneti, mint:
Output0
connection.total_changes
a száma adatbázis sor, hogy megváltoztak a connection
. Mivel még nem hajtottunk végre SQL parancsokat, a 0 total_changes
helyes.
ha bármikor úgy találjuk, hogy újra el akarjuk indítani ezt a bemutatót, törölhetjük a aquarium.db
fájlt a számítógépünkről.,
megjegyzés: az SQLite adatbázishoz is csatlakozhat, amely szigorúan a memóriában (és nem fájlban) található, a ":memory:"
sqlite3.connect()
speciális karakterlánc átadásával. Például: sqlite3.connect(":memory:")
. A ":memory:"
SQLite adatbázis eltűnik, amint a Python program kilép. Ez akkor lehet kényelmes, ha azt szeretné, hogy egy ideiglenes homokozó kipróbáljon valamit az SQLite-ban, és nem kell semmilyen adatot tárolnia a program kilépése után.,
2. lépés-Adatok hozzáadása az SQLite adatbázishoz
most, hogy csatlakoztunk a aquarium.db
SQLite adatbázishoz, elkezdhetjük az adatok beillesztését és olvasását.
egy SQL adatbázisban az adatokat táblázatokban tárolják. A táblázatok oszlopkészletet határoznak meg, és 0 vagy több sort tartalmaznak az egyes meghatározott oszlopok adataival., a táblázat neve fish
ezt követi a következő adatokat:
név | faj | tank_number |
---|---|---|
Sammy | cápa | 1 |
Jamie | tintahal | 7 |
A fish
táblázat a pálya, hogy egy érték name
, species
vagy tank_number
minden hal az akváriumban., 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()
., A "CREATE TABLE fish ..."
karakterlánc egy SQL utasítás, amely létrehoz egy fish
nevű táblát a korábban leírt három oszloppal: TEXT
, és tank_number
INTEGER
.,
most, hogy létrehoztunk egy táblázatot, beilleszthetünk adatsorokat:
cursor.execute("INSERT INTO fish VALUES ('Sammy', 'shark', 1)")cursor.execute("INSERT INTO fish VALUES ('Jamie', 'cuttlefish', 7)")
hívjuk cursor.execute()
két alkalommal: egyszer beszúrni egy sort a cápa Sammy
tartályban 1
, és egyszer beszúrni egy sort a tintahalhoz Jamie
tartályban 7
. "INSERT INTO fish VALUES ..."
egy SQL utasítás, amely lehetővé teszi számunkra, hogy sorokat adjunk a táblához.,
a következő szakaszban egy SQL SELECT
nyilatkozatot használunk a fish
táblázatunkba beillesztett sorok ellenőrzésére.
3. lépés-az SQLite adatbázis adatainak olvasása
a 2. lépésben két sort adtunk hozzá a fish
nevű SQLite táblához., Tudjuk tölteni azokat a sorokat, használja a SELECT
SQL utasítás:
rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)
Ha ezt a kódot, látni fogjuk, kimenet, mint a következő:
Output
A cursor.execute()
függvény fut egy SELECT
nyilatkozat letöltése értékek a name
, species
, a tank_number
oszlopok a fish
táblázat. fetchall()
beolvassa a SELECT
utasítás összes eredményét., Amikor print(rows)
látunk egy listát a két tuples. Minden tuple három bejegyzéssel rendelkezik; minden oszlophoz egy bejegyzést választottunk ki a fish
táblázatból. A két tömlő a 2.lépésben beillesztett adatokkal rendelkezik: a Sammy
the shark
, és a Jamie
the cuttlefish
.,
Ha meg akarjuk letölteni sort a fish
asztal, amelyek megfelelnek a meghatározott feltételeknek, használhatjuk a WHERE
záradék:
Ha elfogy ez, látni fogjuk, kimenet, mint a következő:
Output
Mint az előző példában, cursor.execute(<SQL statement>).fetchall()
lehetővé teszi számunkra, hogy hozzon az eredményeket egy SELECT
nyilatkozatot. AWHERE
záradék aSELECT
utasításszűrők sorokhoz, ahol a értéketarget_fish_name
., Vegye figyelembe, hogy a?
– ot használjuk atarget_fish_name
változó helyettesítésére aSELECT
utasításba. Arra számítunk, hogy csak egy sornak felel meg, sőt, csak a Jamie
cuttlefish
visszatér.
figyelmeztetés: soha ne használjon Python karakterlánc műveleteket az SQL utasítás karakterlánc dinamikus létrehozásához. A Python string műveletek össze egy SQL utasítás string hagy sebezhető SQL injection támadások. Az SQL injection támadások felhasználhatók az adatbázisban tárolt adatok ellopására, megváltoztatására vagy más módon történő módosítására., Mindig használja a ?
helyőrzőt az SQL utasításokban, hogy dinamikusan helyettesítse a python program értékeit. Adja át az értékek egy elemét második argumentumként a Cursor.execute()
értékeknek az SQL utasításhoz való kötéséhez. Ezt a helyettesítési mintát itt és a bemutató más részein is bemutatják.
4. lépés-az SQLite adatbázis adatainak módosítása
az SQLite adatbázis sorai módosíthatók a UPDATE
és DELETE
SQL utasításokkal.,
mondjuk például, hogy Sammy a cápa költözött tartály száma 2. A fish
táblázat sorait megváltoztathatjuk, hogy tükrözze ezt a változást:
UPDATE
SQL utasítás atank_number
Sammy
új értékére div id=”84fb4d0fd0″>. AWHERE
záradék aUPDATE
nyilatkozatban biztosítja, hogy csak atank_number
értékét változtassuk meg, ha egy sorname = "Sammy"
.,
Ha a következő SELECT
nyilatkozatot, meg tudjuk erősíteni a frissítés helyesen:
rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)
Ha elfogy ez, látni fogjuk, kimenet, mint a következő:
Output
Észre, hogy a sor a Sammy
most van az értéket a 2
a tank_number
oszlop.
tegyük fel, hogy Sammy a cápa szabadult a vadonba, és már nem tartja az akvárium., Mivel Sammy már nem él az akváriumban, érdemes lenne eltávolítani a Sammy
sort a fish
táblázatból.
a DELETE
SQL utasítás egy sor eltávolításához:
released_fish_name = "Sammy"cursor.execute( "DELETE FROM fish WHERE name = ?", (released_fish_name,))
a DELETE
SQL utasítás a Sammy
sor eltávolításához div id=”e437841f51″>. AWHERE
záradék aDELETE
utasítás biztosítja, hogy csak akkor töröljünk egy sort, ha az adott sorname = "Sammy"
.,
Ha a következő SELECT
nyilatkozatot futtatjuk, megerősíthetjük, hogy a Törlés helyesen történt:
rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)
ha futtatjuk ezt a kódot, akkor a következő kimenetet fogjuk látni:
Output
vegye figyelembe, hogy a sor Sammy
a shark
eltűnt, és csak Jamie
a cuttlefish
marad.,
5.lépés — a"aquarium.db"
SQLite database: a Connection
connection
id=”Cursor
cursor
nevű objektum.
ugyanúgy, ahogy a Python fájlokat le kell zárni, amikor velük dolgozunk, Connection
és Cursor
az objektumokat akkor is le kell zárni, ha már nincs rájuk szükség.,
használhatunk egy with
nyilatkozatot, hogy segítsen nekünk automatikusan bezárni Connection
és Cursor
objektumok:
closing
a által biztosított kényelmi funkció div id=”47dbdc9155″> modul. Ha awith
kijelentés kilép,closing
biztosítja, hogy aclose()
bármilyen objektumnak nevezzük. Ebben a példában kétszer használjuk a closing
függvényt., Egyszer a Connection
sqlite3.connect()
által visszaküldött objektum automatikusan lezárásra kerül, másodszor pedig annak biztosítására, hogy a Cursor
connection.cursor()
által visszaküldött objektum automatikusan bezárásra kerüljön.,
Ha ezt a kódot, látni fogjuk, kimenet, mint a következő:
Output
Mivel "SELECT 1"
egy SQL utasítást, amely mindig visszatér, egyetlen sort, egyetlen oszlop értéke 1
, logikus, hogy egy tuple a 1
, mint az egyetlen érték visszatért a kódot.
következtetés
a sqlite3
modul a Python standard könyvtár erőteljes része; lehetővé teszi számunkra, hogy egy teljes funkcionalitású on-disk SQL adatbázissal dolgozzunk további szoftverek telepítése nélkül.,
ebben a bemutatóban megtanultuk, hogyan kell használni a sqlite3
modult egy SQLite adatbázishoz való csatlakozáshoz, adatok hozzáadásához az adatbázishoz, valamint az adatok olvasásához és módosításához az adatbázisban. Az út mentén, azt is megtudtuk, a kockázatok SQL injection támadások, valamint hogyan kell használni contextlib.closing
automatikusan hívja close()
A Python objektumok with
nyilatkozatok.
innen többet megtudhatunk az SQL adatbázisokról az SQLite vs MySQL vs PostgreSQL-ben: a relációs adatbázis-kezelő rendszerek összehasonlítása.