Az sqlite3 modul használata a Python 3-ban

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.dbfá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:

Output
0

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 fishnevű 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:

UPDATESQL utasítás atank_numberSammyúj értékére div id=”84fb4d0fd0″>. AWHEREzáradék aUPDATEnyilatkozatban 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 connectionid=”Cursorcursornevű 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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

Tovább az eszköztárra