Programmēšana

SQLite datu bāzes apgūšana Python

SQLite datu bāzes apgūšana Python

SQLite ir relāciju datu bāzes pārvaldības sistēma, kuras pamatā ir SQL valoda; tas ir bez servera, nulles konfigurācijas datu bāzes dzinējs. Tas ir viens no populārākajiem datu bāzu dzinējiem, un to ir ļoti viegli izmantot mazās lietojumprogrammās. Tas izveido tikai vienu diska failu visas datu bāzes glabāšanai, kas padara failu pārnēsājamu. To izmanto Android OS kā galveno datu glabāšanas avotu. To pārlūks Google Chrome izmanto arī vietņu un lietotāju datu, tostarp paroļu, glabāšanai vietējā mašīnā.

Uzlabots darbs ar SQLite Database Python

Šajā apmācībā tiks aplūkotas šādas tēmas: attēlu ievietošana SQLite tabulā, datu bāzē esošo tabulu uzskaitīšana, kopējo izmaiņu identificēšana kopš datubāzes savienošanas, datu bāzes dublēšana, SQLite datu bāzes izgāšana, SQLite atjaunošana, dzēšana ieraksti no tabulas, tabulas nomešana un SQLite datu bāzes izņēmumi.

Iespējams, vēlēsities redzēt arī šīs apmācības pirmo daļu, kurā parādīts SQLite pamati, tā izmantošanas priekšrocības, savienojuma izveide ar datu bāzes failu, tabulas izveide datu bāzē, datu ievietošana tabulā, datu pieprasīšana no tabulas, tabulas atjaunināšana un daudz kas cits.

Faili un attēli SQLite datu bāzē

Strādājot ar datu bāzēm, ir situācijas, kad jums jāievieto attēli vai faili datu bāzē vai jāeksportē no tās. Piemēram, ja veidojat datu bāzi darbinieku datu glabāšanai, iespējams, datu bāzē būs jāievieto arī katra darbinieka attēli.

Lai pievienotu attēlus SQLite datu bāzē, mums jāizmanto SQLite BLOB datu tips. Datu tipu BLOB () izmanto, lai uzglabātu lielus objektus, parasti lielus failus, piemēram, attēlus, mūziku, video, dokumentus, PDF utt. Pirmais solis ir konvertēt datus un attēlus Python baitu objektā, kas ir līdzīgs SQLite BLOB datu tipam. Pirms turpināt, izveidojiet tabulu ar nosaukumu students datu bāzē ar laukiem id, nosaukums, attēli, atzīmes. Lai izveidotu tabulu, palaidiet šo kodu.

importēt sqlite3 conn = sqlite3.savienot ("paraugs.db ") print (" \ n [+] Veiksmīgi izveidots savienojums ar datu bāzi ") cur = savienojums.cursor () print ("\ n [+] Kursors ir veiksmīgi iestatīts") tabula = cur.izpildīt ("" "CREATE TABLE students (id INT PRIMARY KEY, name TEXT, images BLOB, marks TEXT);" "") print ("\ n [+] Tabula ir veiksmīgi izveidota") cur.aizvērt () savienojums.izdarīt () savien.aizvērt ()

Šī programma izveidos jaunu tabulu ar nosaukumu students. Terminālā jūs redzēsiet šādu izvadi.

Attēla ievietošana

Lai ievietotu attēlu SQLite datu bāzē, pārveidojiet attēlu pitona baitu objektā un pēc tam ievietojiet to kolonnā Attēli, kas pieņem BLOB datus. Lai pievienotu attēlu, palaidiet šo kodu img.png datu bāzē, izmantojot Python.

importēt sqlite3 conn = sqlite3.savienot ("paraugs.db ") savienojums.text_factory = str print ("\ n [+] Veiksmīgi izveidots savienojums ar datu bāzi") cur = conn.kursors () print ("\ n [+] Kursors ir veiksmīgi iestatīts") ar atvērtu ("img.png "," rb ") kā fails: dati = fails.read () python_tuple = (101, "robin", data, "90") print ("\ n [+] Attēls ir veiksmīgi importēts") print ("\ n [+] Tagad ievieto datu bāzē") cur.izpildīt ("INSERT INTO student (ID, vārds, attēli, atzīmes) VALUES (?,?,?,?) ", python_tuple) print (" \ n [+] Dati ir veiksmīgi ievietoti ") cur.aizvērt () savienojums.izdarīt () savien.aizvērt ()

Šī programma ievietos attēlu jūsu izveidotajā studentu datu bāzē. Jūs redzēsiet šādu izvadi.

Iepriekš minētajā programmā mēs esam atvēruši failu binārā režīmā un izlasījuši katru baitu un saglabājuši to mainīgajā dati. Tad mēs izmantojam šo mainīgo INSERT priekšrakstā, lai ievietotu attēlu datu bāzē.

Notiek attēla izguve

Lai izgūtu attēlu no datu bāzes, ielādējiet rindu, izmantojot atlasi un pēc tam piekļūstiet attēla binārajiem datiem pitona mainīgajā, kas tiks saglabāts attēla failā. Skatīt ilustrācijai šo kodu.

importēt sqlite3 conn = sqlite3.savienot ("paraugs.db ") savienojums.text_factory = str print ("\ n [+] Veiksmīgi izveidots savienojums ar datu bāzi") cur = conn.kursors () print ("\ n [+] Kursors ir veiksmīgi iestatīts") print ("\ n [+] Notiek attēla izguve") cur.izpildīt ("SELECT * FROM students") ret = cur.fetchall () priekš i in ret: data = i [2] ar atvērtu ("img2.png "," wb ") kā fails: fails.rakstīt (dati) drukāt ("\ n [+] Attēls ir saglabāts") cur.aizvērt () savienojums.izdarīt () savien.aizvērt ()

Šī vienkāršā programma izgūs attēlu no datu bāzes un saglabās to diskā ar nosaukumu img2.png. Attēla failam varat izvēlēties arī citu nosaukumu. Programmas rezultāts ir parādīts zemāk.

Uzskaitiet visas datu bāzes tabulas

Datu bāzē mēs varam izveidot daudz tabulu. Tāpēc ir jāuzskaita arī visas datu bāzes esošās tabulas. Lai uzskaitītu datu bāzē esošās tabulas, vaicājiet tabulai sqlite_master, izmantojot SQL priekšrakstu SELECT. Vaicājuma sintakse būs šāda:

Atlasiet vārdu FROM sqlite_master WHERE type = "table"

Lūk, kā mēs izmantojam šo vaicājumu, lai uzskaitītu visas mūsu datu bāzē esošās tabulas.

importēt sqlite3 conn = sqlite3.savienot ("paraugs.db ") print (" \ n [+] Veiksmīgi izveidots savienojums ar datu bāzi ") cur = savienojums.kursors () print ("\ n [+] Kursors ir veiksmīgi iestatīts") cur.izpildīt ("SELECT name from sqlite_master where type =" table "") rows = cur.fetchall () print (rindas) cur.aizvērt () savienojums.izdarīt () savien.aizvērt ()

Iepriekš minētajā kodā tiks uzskaitītas visas tabulas, kas atrodas mūsu datubāzē. Izlaide, ko rada kods, izpildot, ir šāda. Atkarībā no datu bāzē izveidotajām tabulām, iespējams, redzēsit kādu citu izvadi.

Kopējo izmaiņu identificēšana kopš savienojuma ar datu bāzi

Jebkurā situācijā ir lietderīgi noteikt rindu skaitu, kas ir modificēts, ievietots vai dzēsts kopš datubāzes pievienošanas. Tam izmantojiet total_changes () savienojuma objekta metode, kas atgriezīs kopējo datubāzes rindu skaitu, kas ir ietekmēts kopš savienojuma. Apskatīsim demonstrācijas piemēru, lai uzzinātu, kā tas darbojas.

importēt sqlite3 conn = sqlite3.savienot ("paraugs.db ") savienojums.text_factory = str print ("\ n [+] Veiksmīgi izveidots savienojums gan ar datu bāzi") cur = conn.kursors () print ("\ n [+] Abi kursori ir veiksmīgi iestatīti") cur.izpildīt ("INSERT INTO student (ID, vārds, attēli, atzīmes) VALUES (140, 'David',", 99) ") cur.izpildīt ("INSERT INTO student (ID, vārds, attēli, atzīmes) VALUES (150, 'Sam',", 97) ") izmaiņas = savienojums.total_changes print ("\ n [+] Rindu izmaiņu kopsumma tagad ir:", izmaiņas) savien.izdarīt () kur.aizvērt () savienojums.aizvērt ()

Iepriekš minētā programma izdrukās pašreizējā savienojuma izmaiņu skaitu. Jūs redzēsiet šādu izvadi.

Atgriešanās SQLite

Atsaucot dažus uzdevumus, varat izmantot funkciju rollback (). Šo metodi var izmantot, lai atsauktu uzdevumu, kas veikts pēc pēdējās saistības. Skatīt ilustrāciju zemāk esošajā piemērā.

importēt sqlite3 conn = sqlite3.savienot ("paraugs.db ") savienojums.text_factory = str print ("\ n [+] Veiksmīgi izveidots savienojums gan ar datu bāzi") cur = conn.kursors () print ("\ n [+] Abi kursori ir veiksmīgi iestatīti") cur.izpildīt ("INSERT INTO student (id, name, images, marks) VALUES (100001, 'David',", 99) ") cur.izpildīt ("INSERT INTO student (ID, vārds, attēli, atzīmes) VALUES (100002, 'Sam',", 97) ") savienojums.comm () print ("\ n [+] Divas rindas ir veiksmīgi ievietotas") cur.vispirms izpildiet ("SELECT * FROM students") = cur.fetchall () print ("\ n [+] Jaunie ieraksti datu bāzē ir:") i i vispirms: print (i) cur.izpildīt ("INSERT INTO student (ID, vārds, attēli, atzīmes) VALUES (10003, 'Kishan',", 100) ") cur.izpildīt ("INSERT INTO student (ID, vārds, attēli, atzīmes) VALUES (10004, 'Ankit',", 100) ") print (" \ n [+] Divas rindas ir veiksmīgi ievietotas, bet nav izdarītas ").rollback () print ("\ n [+] Mēs esam atcēluši iepriekšējās komandas, tāpēc jaunie dati netiks ievietoti") savienojums.izdarīt () kur.izpildīt ("SELECT * FROM students") otrais = cur.fetchall () print ("\ n [+] Jaunie ieraksti datu bāzē ir:") i sekundē i: print (i) cur.aizvērt () savienojums.aizvērt ()

Iepriekš minētajā piemērā pirmie divi ievietošanas priekšraksti ievietos datus, kā norādīts, bet pēdējie divi ievietošanas priekšraksti tiks atcelti, tāpēc tie tabulā nepievienos nekādus datus. Rezultāts būs tāds, kā parādīts zemāk.

Dublējiet datu bāzi

Strādājot ar datu bāzi, ir svarīgi veikt datu bāzes dublējumu. Modulis sqlite3 nodrošina funkciju datu bāzes dublēšanai. Izmantojot savienojuma objekta backup () metodi, mēs varam izveidot SQLite datu bāzes dublējumu. Dublēšanas metodes sintakse ir šāda:

dublējums (mērķis, *, lapas = 0, progress = nav, nosaukums = "main", miegs = 0.250)

Pēc noklusējuma vai kad lapas ir vai nu 0 vai negatīvs vesels skaitlis, visa datu bāze tiek kopēta vienā solī, kas ir vēlams mazai datu bāzei; pretējā gadījumā metode veic cilnes kopēšanu līdz lapas laikā, ko varēja izdarīt ar plašo datu bāzi. The nosaukums arguments parāda kopējamo datu bāzes nosaukumu: tai jābūt virknei, kas satur noklusējumu, lai norādītu galveno datu bāzi vai norādītu pagaidu datu bāzi. The Gulēt arguments norāda miega laiku sekundēs starp mēģinājumiem dublēt atlikušās lapas. Tas var būt vai nu kā vesels skaitlis, vai kā peldošā komata vērtība.

Ļaujiet mums veikt datu bāzē.db datu bāzi, kuru mēs izmantojām apmācībā.

importēt sqlite3 conn_main = sqlite3.savienot ("paraugs.db ") conn_backup = sqlite3.savienot ("parauga_dublējums.db ") print (" \ n [+] Veiksmīgi izveidots savienojums ar abām datu bāzēm ") cur_main = conn_main.kursors () cur_backup = savienojuma_dublējums.kursors () print ("\ n [+] Abi kursori ir veiksmīgi iestatīti") conn_main.dublējums (conn_backup, lapas = 0, progress = None, name = "main") drukāt ("Datu bāzes sekmīga dublēšana") cur_main.aizvērt () cur_backup.aizvērt () conn_main.veikt () savienojuma dublēšana.izdarīt () savienot_main.aizvērt () savienojuma dublēšana.aizvērt ()

Iepriekš minētajā kodā abas datubāzes ir savienotas, viena ir datu bāze, no kuras mēs vēlamies izveidot dublējumu, un otra ir datubāze, kurā mēs ņemsim dublējumu. Izmantojiet dublējums () pirmā datu bāzes savienojuma objekta metode dublējuma izveidošanai. Šī funkcija pieņem otrās datu bāzes savienojuma objektu kā mērķi, lai izveidotu dublējumu otrā datu bāzē. Izmantojiet lapas = 0 argumenti, tātad process notiks vienā solī, kas ir ieteicams mazām datu bāzēm. Šī programma izveidos jaunu datu bāzes nosaukuma paraugu_dublējums.db un aizpildiet to ar pirmās datubāzes dublējumu. Iespējams, pašreizējā mapē ir izveidota jauna datu bāze ar tādu pašu faila lielumu kā iepriekšējā.

SQLite datu bāzes izgāšana

Datu bāzu izgāšana ir svarīgs uzdevums. Parasti dump fails ir SQL priekšrakstu kopa datiem, ko parasti izmanto dublēšanai. Mēs varam izmest datu bāzi, izmantojot dump () metodi. Skatiet šo piemēru, lai uzzinātu, kā nomest SQLite datu bāzi.

importēt sqlite3 con = sqlite3.savienot ("datu bāze.db ") ar atvērtu ('dump.sql ',' w ') kā f: līnijai kon.iterdump (): f.rakstīt ('% s \ n'% rinda)

Iepriekš minētā programma izgāzīs datu bāzes paraugu.db, un tas saglabās izmestos datus failā ar nosaukumu dump.kvl. Jūs varat redzēt datus, kas atrodas direktorijā, kur darbojas pitona faili, un atvērt tos, izmantojot jebkuru teksta redaktoru.

SQLite izpildesanyana () metode3

The izpilddirektors () metode izpilda SQL komandu pret visām secībā atrodamajām parametru secībām vai kartējumiem seq_of_parameters. Vienkāršības labad šo metodi var izmantot, lai izpildītu lielāko daļu SQL komandu vienā rindā. E.g., Izmantojot šo komandu, caur pitonu sarakstu mēs varam ievietot jebkuru skaitu rindu. Skatiet zemāk redzamo piemēru.

importēt sqlite3 conn = sqlite3.savienot ("paraugs.db ") print (" \ n [+] Veiksmīgi izveidots savienojums ar datu bāzi ") cur = savienojums.kursors () print ("\ n [+] Kursors ir veiksmīgi iestatīts") python_list = [(10000000, 'vivek', ", '10'), (100000001, 'rose',", '21'), (100000002, 'robin', ',' 31 '), (100000003,' Dev ',', '4'), (100000004, 'michael', ',' 52 ')] cur.izpilddirektors ("INSERT INTO student (id, name, images, marks) VALUES (?,?,?,?) ", python_list) print (" \ n [+] Visi dati ir veiksmīgi ievietoti ") cur.aizvērt () savienojums.izdarīt () savien.aizvērt ()

Iepriekš minētā programma ievietos visus datus, kas norādīti pitonu sarakstā. Programmas izlaides produkcija ir parādīta zemāk.

Dzēst ierakstus no tabulas

Lai dzēstu ierakstus no tabulas, mēs varam izmantot operāciju DELETE. Mēs varam ātri noņemt rindu, izmantojot operāciju DELETE ar klauzulu WHERE. Izraksta DELETE pamata sintakse ir šāda:

DZĒST no tabulas_nosaukums WHERE daži_nosacījums;

Apskatīsim piemēru. Mēs izdzēsīsim rindu ar ID 1001 no mūsu datu bāzes darbinieku tabulas.

importēt sqlite3 conn = sqlite3.savienot ("paraugs.db ") savienojums.text_factory = str print ("\ n [+] Veiksmīgi izveidots savienojums ar datu bāzi") cur = conn.kursors () print ("\ n [+] Kursors ir veiksmīgi iestatīts") cur.izpildīt ("DELETE FROM studente WHERE id = 1001") print ("\ n [+] Rinda veiksmīgi izdzēsta") cur.izpildīt ("SELECT * FROM students") dati = cur.fetchall () rindai datos: drukāt (rindu) cur.aizvērt () savienojums.izdarīt () savien.aizvērt ()

Iepriekš minētais kods izdzēsīs rindu ar ID 1001. No paziņojuma SELECT atgriešanās var redzēt, ka rinda ir noņemta. Programmas rezultāts ir tāds, kā parādīts zemāk.

Nometiet galdu

Mēs varam ātri nomest vai izdzēst tabulu, izmantojot SQLite DROP priekšrakstu. DROP priekšraksta sintakse ir šāda:

DROP tabulas tabulas_nosaukums 

Ja tabulas nav, tad SQLite uzmetīs kļūdu, tāpēc, lai to novērstu, mēs varam izmantot ja pastāv tagu ar paziņojumu DROP. Skatiet šo sintaksi:

DROP tabula, ja pastāv table_name

Apskatīsim, kā mēs varam izmantot šo paziņojumu ar pitonu sqlite3 modulis tabulas dzēšanai. Šajā programmā mēs noņemsim students tabulu, kuru esam izveidojuši agrāk.

importēt sqlite3 conn = sqlite3.savienot ("paraugs.db ") savienojums.text_factory = str print ("\ n [+] Veiksmīgi izveidots savienojums ar datu bāzi") cur = conn.kursors () print ("\ n [+] Kursors ir veiksmīgi iestatīts") cur.izpildīt ("DROP TABLE IF EXISTS student") print ("\ n [+] Tabula ir veiksmīgi nomesta") cur.aizvērt () savienojums.izdarīt () savien.aizvērt ()

Iepriekš minētā programma izdzēsīs tabulu students no paraugs datu bāzē. Lai redzētu, vai tabula ir izdzēsta, mēs varam izmantot iepriekš redzēto saraksta tabulas komandu. Programmas rezultāts ir tāds, kā parādīts zemāk.

SQLite datu bāzes izņēmumi

Daži SQLite datu bāzes izņēmumi var būt radušies kādas kļūdas dēļ. Apskatīsim mazliet, kad šīs kļūdas tika atklātas.

Šis ir visu SQLite izņēmumu saraksts; mēs varam rīkoties ar šiem izņēmumiem mūsu programmās, izmantojot Python pamata mēģināšanas / izņemot kļūdu apstrādes metodi.

Secinājums

Tādējādi mēs nonākam līdz visaptverošās rokasgrāmatas beigām par progresīvām metodēm darbam ar SQLite, izmantojot Python. Es ceru, ka jūs apguvāt visus SQLite3 aspektus, izmantojot Python, kas mums palīdzēs veidot fantastiskus Python projektus.

10 labākās spēles, kuras spēlēt Ubuntu
Windows platforma ir bijusi viena no dominējošajām spēļu platformām, jo ​​mūsdienās tiek attīstīts milzīgs spēļu skaits, lai atbalstītu Windows. Vai k...
5 labākās arkādes spēles Linux
Mūsdienās datori ir nopietnas mašīnas, kuras izmanto spēlēšanai. Ja jūs nevarat iegūt jauno augsto rezultātu, jūs zināt, ko es domāju. Šajā ierakstā j...
Cīņa par Vesnotu 1.13.6 Izlaista attīstība
Cīņa par Vesnotu 1.13.6 izlaists pagājušajā mēnesī, ir sestais izstrādes izlaidums 1.13.x sērija un tā nodrošina vairākus uzlabojumus, īpaši lietotāja...