0% au considerat acest document util (0 voturi)
3 vizualizări36 pagini

Unitatea-5 Python

Documentul oferă o introducere în programarea bazelor de date folosind Python, evidențiind suportul acestuia pentru diverse baze de date și utilizarea API-ului DB-API. Se discută despre limbajul SQL, comenzile de bază pentru gestionarea bazelor de date și beneficiile utilizării Python pentru aceste sarcini. De asemenea, se explică modul în care se poate accesa o bază de date prin intermediul adaptoarelor și se detaliază atributele și excepțiile asociate cu DB-API.

Tradus de

ScribdTranslations
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
3 vizualizări36 pagini

Unitatea-5 Python

Documentul oferă o introducere în programarea bazelor de date folosind Python, evidențiind suportul acestuia pentru diverse baze de date și utilizarea API-ului DB-API. Se discută despre limbajul SQL, comenzile de bază pentru gestionarea bazelor de date și beneficiile utilizării Python pentru aceste sarcini. De asemenea, se explică modul în care se poate accesa o bază de date prin intermediul adaptoarelor și se detaliază atributele și excepțiile asociate cu DB-API.

Tradus de

ScribdTranslations
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

Programare Python

[Link]. Anul IV Semestrul I

COLEGIUL DE INGINERIE MALLAREDDY PENTRU FEMEI


(Instituț ie autonomă - UGC, Guvernul Indiei)

PROGRAMARE ÎN PYTHON
Course Code: CS721PE

C. RAJEEV
Asist. prof.
CSE,
MRECW.
UNITATEA-5
UNITATE – V
Programarea bazelor de date: Introducere, Baza de date Python

Interfaț a Programatorului de Aplicaț ii (DB-API), Obiect


Manageri relaț ionali (ORM-uri), Modulele asociate
Programarea bazelor de date: Introducere

Limbajul de programare Python are caracteristici puternice pentruprogramare baze de date

Python suportă diverse baze de date precum MySQL, Oracle, Sybase, PostgreSQL, etc.
Python suportă, de asemenea, Limbajul de Definiț ie a Datelor (DDL), Limbajul de Manipulare a Datelor

(DML) ș i instrucț iuni de interogare a datelor.

Pentru programarea bazelor de date, Python DB API este un modul utilizat pe scară largă care oferă o

interfaț a de programare a aplicaț iilor de bază de date.

Standardul Python pentru interfeț ele de baze de date este Python DB-API.

You can choose the right database for your application.


API-ul de baze de date Python suportă o gamă largă de servere de baze de date, cum ar fi -

Musca de gad Informix


mSQL Interbase
MySQL Oracle
PostgreSQL Sybase
Microsoft SQL Server 2000
Baza de date Python.
Datele sunt recuperate dintr-un sistem de baze de date folosind limbajul SQL.

Datele sunt peste tot, iar aplicaț iile software le folosesc. Datele sunt fie în memorie, fie în fiș iere sau

baze de date.

Python are legături pentru multe sisteme de baze de date, inclusiv MySQL, PostgreSQL, Oracle,

Microsoft SQL Server ș i Maria DB.


Unul dintre aceste sisteme de gestionare a bazelor de date (DBMS) se numeș te SQLite.

SQLite a fost creat în anul 2000 ș i este unul dintre numeroasele sisteme de gestionare din
baza de date zoo.
SQL:
SQL este un limbaj de programare de specialitate destinat gestionării datelor păstrate în
o baze de date.
Comenzile ș i interogările bazei de date sunt date unei baze de date prin SQL.

Cele mai multe baze de date sunt configurate să fie insensibile la majuscule, în special comenzile bazei de date.

Stilul acceptat este de a folosi majuscule pentru cuvintele cheie din baza de date.

Cele mai multe programe din linia de comandă necesită un punct ș i virgulă final ( ; ) pentru a termina o SQL

declaraț ie.
Iată câteva exemple de comenzi SQL.
1. Crearea unei baze de date

CREAȚI BAZA DE DATE test;


ACORDĂ TOATE PE test.* utilizatorului(s);

Prima linie creează o bază de date numită "test," ș i


Presupunând că eș ti un administrator de baze de date, a doua linie poate fi folosită pentru

acordă permisiuni unor utilizatori specifici (sau tuturor acestora) astfel încât să poată efectua

operaț iuni de baze de date


2. Folosind o bază de date

FOLOSIT test;

Dacă te-ai conectat la un sistem de baze de date fără să alegi care bază de date vrei să foloseș ti, aceasta

Declaraț ia simplă permite specificarea uneia cu care să efectuezi operaț iuni de bază de date.
3.Ș tergerea unei baze de date

Ș terge baza de date test;

Această declaraț ie simplă elimină toate tabelele ș i datele din baza de date ș i le ș terge din
sistemul.
[Link] unui Tabel
CREAȚI TABELA utilizatori (login VARCHAR(8), uid INT, prid INT);
Această declaraț ie creează un nou tabel cu o coloană de tip string login ș i o pereche de câmpuri întregi uid

ș i mândru.
5. Ș tergerea unei Tabele
Ș terge tabelul utilizatori;

Această afirmaț ie simplă ș terge un tabel de bază de date împreună cu toate datele sale.
6. Inserarea unei rânduri

INSERARE ÎN utilizatori VALORI ('leanna', 311, 1);

Puteț i insera un nou rând într-o bază de date cu instrucț iunea INSERT. Specificaț i tabelul.

ș i valorile care intră în fiecare câmp. Pentru exemplul nostru, ș irul 'leanna' intră în
câmp de conectare, ș i 311 ș i 1 pentru uid ș i prid, respectiv.

7. Actualizarea unui rând

UPDATE users SET prid=4 WHERE prid=2;


UPDATE users SET prid=1 WHERE uid=311;
Pentru a schimba rândurile existente ale unui tabel, folose ș ti declara ț ia UPDATE. Folose ș te SET pentru

coloană care se schimbă ș i oferă orice criterii pentru determinarea căror rânduri ar trebui
schimbare.
În primul exemplu, toț i utilizatorii cu un "ID de proiect" sau prid de 2 vor fi mutaț i în proiect

În al doilea exemplu, luăm un utilizator (cu unUID de 311) ș i îl mutăm în


proiectul #1.
8. Ș tergerea unei linii

Ș TERGE DIN utilizatori UNDE prid=%d;


Ș TERGE DIN utilizatori;

Pentru a ș terge un rând dintr-un tabel, foloseș te comanda DELETE FROM, dând tabelul pe care vrei să-l ș tergi

row-urile din, ș i orice criterii opț ionale. Fără aceasta, aș a cum este în al doilea exemplu, toate row-urile vor fi

ș ters.
Beneficiile Python pentru programarea bazelor de date
Programarea în Python este fără îndoială mai eficientă ș i mai rapidă comparativ cu altele.

limbi.
Python este cunoscut pentru portabilitatea sa.

Este independent de platformă.


Python suportă cursoarele SQL.
În multe limbaje de programare, dezvoltatorul de aplicaț ii trebuie să aibă grijă de
conexiuni deschise ș i închise ale bazei de date, pentru a evita alte excepț ii ș i erori.
Python, aceste conexiuni sunt gestionate de Python suportă baze de date relaț ionale
sisteme.
API-urile de baze de date Python sunt compatibile cu diferite baze de date, aș a că este foarte uș or să

migraț i ș i portati interfeț ele aplicaț iilor de bază de date.


We must downloada separateDB API modulefor each database we need to access.
De exemplu, dacă trebuie să accesaț i o bază de date Oracle, precum ș i o bază de date MySQL,
trebuie să descărcaț i atât modulele de bază de date Oracle, cât ș i cele MySQL.

API-ul DB oferă un standard minim pentru lucrul cu baze de date folosind Python
structuri ș i sintaxă oriunde este posibil.
Această API include următoarele -
[Link] modulului API.
[Link]ț inerea unei conexiuni cu baza de date.
3. Emiterea instrucț iunilor SQL ș i a procedurilor stocate.

4. Închiderea conexiunii
Baze de date ș i Python:
Putem accesa baze de date rela ț ionale din Python, fie direct printr-o bază de date
interfaț ă, sau printr-un ORM.

Modul de accesare a unei baze de date din Python este printr-un adaptor.

Un adaptor este, în esenț ă, un modul Python care îț i permite să interacț ionezi cu o relaț ională
biblioteca de client a bazei de date, de obicei în C.

Se recomandă ca toate adaptoarele Python să se adapteze la aplicaț ia DB-SIG Python.


Interfaț a de Programare a Aplicaț iilor (API).
Figura reprezintă „Comunicarea stratificată între aplicaț ie ș i bază de date.”

Figura ilustrează straturile implicate în scrierea unei aplicaț ii de bază de date Python, cu
ș i fără un ORM.

theDB-API este interfaț a ta cu bibliotecile C ale clientului de bază de date.


Primul box este în general un program C/C++, în timp ce adaptoarele conforme cu DB-API permit

aplicaț ii de programare în Python.

ORM-urile pot simplifica o aplicaț ie gestionând toate detaliile specifice bazei de date.
Interfaț a Programatorului de Aplicaț ii pentru Baze de Date (DB-API) Python:

Ce este DB-API?
API-ul este o specificaț ie care stabileș te un set de obiecte necesare ș i acces la baza de date

mecanisme pentru a oferi acces consistent prin diferitele adaptoare de baze de date ș i
sisteme de baze de date subiacente.

DB-API este o specificaț ie pentru o interfaț ă comună cu bazele de date relaț ionale.
În „vechile zile”, aveam un scenariu cu multe baze de date ș i multe persoane
implementând propriile adaptoare de bază de date. Era o roată care era reinventată
din nou ș i din nou. Aceste baze de date ș i adaptoare au fost implementate în momente diferite
de diferite persoane fără nicio consistenț ă a funcț ionalităț ii.

A fost înfiin ț ată un grup de interes special (SIG) pentru conectivitatea bazelor de date Python, ș i

în cele din urmă, a fost creat o API ... versiunea 1.0 a theDB-API.

API-ul oferă o interfaț ă coerentă pentru o varietate de baze de date relaț ionale, ș i
portarea codului între diferite baze de date este mult mai simplă, necesitând de obicei doar

tweaking several lines of code. The current version of the specification isversion 2.0.
Atributele modulului
Un modul conform DBAPI trebuie să definească atributele globale.

I. DB-API Module Attributes:


I. Atributele datelor:
Atribut Description
[Link] de aplicaț ie----------------------Versiunea modulului DB-API este conformă cu
[Link] pe fire---------------Nivelul de securitate pe fire al acestui modul
[Link]-----------------SQL statement parameter style of this module
[Link]()------------------Funcț ia Conectare()
[Link] de apeduct:
Constantă de ș ir care stipulează nivelul API DB acceptat.

În prezent, sunt permise doar ș irurile „1.0” ș i „2.0”.


Dacă nu este furnizat, ar trebui presupus un interface de nivel aDB-API 1.0.
2. threadsafety:
Aceasta este un întreg cu aceste valori posibile:
0: Nu este sigur pentru fire, aș a că firele nu ar trebui să împărtăș ească deloc modulul.

1: Minim de siguranț ă în privinț a firelor: firele pot împărtăș i modulul, dar nu conexiunile.

2: Moderat sigur pentru fire: firele pot împărtă ș i modulul ș i conexiunile, dar nu
cursori.
3: Complet thread-safe: firele pot împărtăș i modulul, conexiunile ș i cursurile.
[Link]
API-ul suportă o varietate de modalităț i de a indica modul în care parametrii ar trebui să fie integraț i

într-o instrucț iune SQL care este trimisă în cele din urmă serverului pentru execuț ie.

Această argument este doar un ș ir care specifică forma de substituț ie a ș irului pe care o vei
folosiț i atunci când construiț i rânduri pentru o interogare sau o comandă.
II. Atribut(e) Func ț ional(e):
[Link]()
Funcț ia connect() accesul la baza de date este disponibil prin Conexiune
obiecte.
Un modul conform trebuie să implementeze o funcț ie connect(), care creează ș i returnează
un obiect Connection.
Atributele funcț iei connect()
Parametru Description
utilizator Nume utilizator
parolă Parolă
Gazdă Nume gazdă
bază de date Numele bazei de date

dsn Numele sursei de date

Putem transmite informa ț ii de conexiune la bază de date ca un ș ir cu mai mul ț i parametrii (DSN)
sau parametrii individuali transmi ș i ca argumente pozi ț ionale sau, mai probabil, argumente cu cuvinte cheie.

Iată un exemplu de utilizare a connect() din PEP 249 (Propunerea de Îmbunătăț ire Python):

connect(dsn='myhost:MYDB',user='guido',password='234$')
Utilizarea DSN versus parametrii individuali se bazează în principal pe sistemul pe care îl aveț i.

conectându-se la.

De exemplu, dacă foloseș ti o API precum ODBC sau JDBC, probabil că foloseș ti un DSN,
în timp ce dacă lucrezi direct cu o bază de date, atunci este mai probabil să emiț i separat
parametrii de conectare.

Un alt motiv pentru aceasta este că majoritatea adaptoarelor de bază de date nu au implementat suport pentru

DSN.
Mai jos sunt câteva exemple de apeluri non-DSN connect(). Re ț ineț i că nu toate adaptoarele au

specificaț ia a fost implementată exact,

de exemplu, MySQLdb foloseș te db în loc de bază de date.

["• [Link](host='dbserv', db='inv', user='smith') • [Link](database='sales') •"]


[Link](database='template1', user='pgsql') • [Link]('csrDB',
/usr/local/database') • [Link]('marketing/test
III. Excepț ii
The module should make all error information available through these exceptions or
subclase.
Ierarhia claselor de excepț ii DB-API
1. Aten ț ie:
Excepț ie generată pentru avertizări importante, cum ar fi trunchierea datelor în timpul inserării etc.

2. Eroare:
Excepț ia care este clasa de bază a tuturor celorlalte excepț ii de eroare. O putem folosi pentru a

prinde toate erorile cu o singură declaraț ie except


3. InterfaceError:
Excepț ie generată pentru erorile care sunt legate de interfaț a bazei de date mai degrabă decât de
baza de date în sine.

4. DatabaseError:
Excepț ie generată pentru erorile legate de baza de date

5. DataError:
Excepț ie generată pentru erori care sunt cauzate de probleme cu datele procesate precum
divizare prin zero, valoare numerică în afara intervalului, etc.
6. OperationalError: Eroare în timpul execuț iei operaț iunii de bază de date

7. Eroare de integritate: Eroare de integritate relaț ională a bazei de date

8. InternalError: Eroare care apare în cadrul bazei de date

9. Eroare de programare: Comanda SQL a eș uat

10. EroareDeTipNuEsteSprijinit: A apărut o operaț iune neacceptată


IV. Obiecte de conexiune
Conexiunile sunt modul în care aplicaț ia ta comunică cu baza de date. Ele reprezintă
mecanismul fundamental de comunicare prin care comenzile sunt trimise serverului ș i
rezultate returnate.
Odată ce o conexiune a fost stabilită (sau un grup de conexiuni), creezi cursori pentru
trimite cereri către ș i primeș te răspunsuri de la baza de date.
Metodele obiectului de conexiune:

Method Name Description


închide() Închide conexiunea la baza de date

comite() Finalizează tranzacț ia curentă


rollback() Anulaț i tranzacț ia curentă
cursor() Creează (ș i returnează) un cursor sau un obiect similar cu un cursor

utilizând această conexiune

errorhandler(cxn, cur, errcls, errval) Serveș te ca un handler pentru conexiunea dată


cursor
V. Obiecte Cursor:
Odată ce ai o conexiune, poț i începe să vorbeș ti cu baza de date.

Cursorul permite utilizatorului să emită comenzi în baza de date ș i să recupereze rândurile rezultate din interogări.

Un obiect cursor DB-API Python funcț ionează ca un cursor pentru tine, chiar dacă cursorele nu sunt

supported in the database. In this case, thedatabase adapter creatormust implement


Obiectele CURSOR astfel încât să se comporte ca niș te cursori.

Aceasta îț i menț ine codul Python consistent când schimbi între sistemele de baze de date care

au sau nu au suport pentru cursor.

Odată ce aț i creat un cursor, puteț i executa o interogare sau o comandă (sau multiple interogări)
ș i comenzi) ș i să recupereze una sau mai multe rânduri din setul de rezultate.
În Python, obiectele cursor au atribute ș i metode de date.
Atributele obiectului Cursor:
Atributul obiectului Description
Connection Conexiunea care a creat acest cursor (opț ional)

description Returnează activitatea cursorului (tuple de 7 elemente): (nume, cod_tip,

dimensiune_display, dimensiune_internă, precizie, scară, null_ok);

ultimarowid ID-ul rândului modificat ultima dată (opț ional; dacă ID-urile rândurilor nu sunt)

susț inut, în mod implicit None

număr de rânduri Numărul de rânduri pe care ultima execuț ie*() le-a produs sau a afectat
apelează funcț ia(func[, args]) Appelaț i o procedură stocată

dimensiunearray Numărul de rânduri de preluat deodată cu fetch many();


se setează implicit la 1

închide() Închide cursorul

execute(op[, args]) Executaț i o interogare sau o comandă în baza de date

messages Lista de mesaje (set de tupluri) primite din baza de date


pentru execu ț ia cursorului (op ț ional)

setinput-sizes(sizes) Setaț i dimensiunea maximă a intrării permisă


VI. Tipuri de Obiecte ș i Constructori
Există o linie fină între obiectele Python ș i obiectele nativ ale bazei de date.

Ca programator care scrie pentru DB-API-ul Python, parametrii pe care îi trimiteț i către o bază de date

sunt date ca ș iruri, dar baza de date poate necesita să le convertească într-o varietate de diferite,
tipuri de date acceptate care sunt corecte pentru orice interogare particulară.

De exemplu, ar trebui ca ș irul Python să fie convertit într-un VARCHAR, un TEXT, un


BLOB, sau un obiect BINARY brut, sau poate un obiect DATE sau TIME dacă aceasta este ceea ce

ce ar trebui să fie un ș ir?

Trebuie avut grijă să se furnizeze datele de intrare în baza de date în formatul aș teptat.

DB-API isto create constructors that build special objects that can easily be converted
la obiectele de bază de date corespunzătoare.
Tipuri de obiecte ș i constructori:
Modificări ale API-ului între versiuni
Mai multe schimbări importante au fost făcute atunci când API-ul DB a fost revizuit de la versiunea 1.0

(1996) la 2.0 (1999):


● Modulul dbi necesar a fost eliminat din API
Obiectele de tip au fost actualizate

● Atribute noi adăugate pentru a oferi o legătură mai bună cu baza de date

Semantica callproc() ș i valoarea de returnare a execute() redefinite


● Conversia la excepț ii bazate pe clase
Următoarea versiune a DB-API, denumită provizoriu DB-API 3.0. Acestea includ următoarele:
● Valoare de returnare mai bună pentru nextset() atunci când există un nou set de rezultate

● Schimbă din float în Decimal


● Flexibilitate îmbunătăț ită ș i suport pentru stilurile de parametri

● Declaraț ii pregătite sau caching de declaraț ii

● Rafinaț i modelul de tranzacț ie


● Declaraț i rolul API-ului în ceea ce priveș te portabilitatea

● Adăugaț i teste unitare


Baze de date ș i Python: Adaptori
Pentru fiecare dintre bazele de date suportate, există unul sau mai multe adaptoare care permit

te conectezi la sistemul de baze de date ț intă din Python.


Unele baze de date, cum ar fi Sybase, SAP, Oracle ș i SQLServer, au mai mult de unul
adaptor disponibil.
Cel mai bine este să afli care dintre ele se potrivesc cel mai bine nevoilor tale.

•Întrebările tale pentru fiecare candidat pot include:


•cât de bună este performanț a sa,
• cât de utilă este documentaț ia ș i/sau site-ul său,
•dacă are sau nu o comunitate activă,
•care este calitatea ș i stabilitatea generală a driverului, etc.
Ex:
Pentru MySQL – doar un singur adaptor Python, adică MySQLdb

Pentru PostgreSQL - sunt disponibile trei adaptoare Python, adică psycopg, PyPgSQL ș i PyGreSQL
Pentru SQLite --- doar un adaptor Python, adică sqlite3
Manageri Obiect-Relationali (ORM-uri):
Un mapper relaț ional de obiecte mapează un sistem de baze de date relaț ionale la obiecte

Un mapper obiect-relaț ional (ORM) este o bibliotecă de cod care automatizează transferul de
datele stocate în tabelele bazelor de date relaț ionale în obiecte care sunt mai des utilizate

in application code.

ORM-ul este independent de sistemul de baze de date relaț ionale care este utilizat. Din interiorul

În Python, poț i vorbi cu obiectele iar ORM-ul le va mapa în baza de date.


Obiect – Această parte reprezintă obiectele ș i limbajul de programare în care se află cadrul.
folosit, de exemplu, Python.

Relational– Această parte reprezintă baza de date RDBMS pe care o foloseș ti, cum ar fi – MySQL, Oracle

Bază de date, PostgreSQL, MariaDB, PerconaDB, TokuDB.

Cartografiere – Această parte finală reprezintă puntea ș i conexiunea între cele două părț i anterioare

părț ile, obiectele ș i tabelele bazei de date.


ORM-urile oferă o abstracț ie de nivel înalt asupra unei baze de date relaț ionale care permite unui dezvoltator să

scrie cod Python în loc de SQL pentru a crea, citi, actualiza ș i ș terge date ș i scheme
baza lor de date.

Dezvoltatorii pot folosi limbajul de programare cu care se simt confortabil pentru a lucra cu un

bază de date în loc să scrieț i instrucț iuni SQL sau proceduri stocate.
De exemplu, fără un ORM, un programator ar scrie următoarea declaraț ie SQL pentru a
recuperaț i fiecare rând din tabelul UTILIZATORI unde coloana cod poș tal este 94107:

SELECT * FROM USERS WHERE zip_code=94107;


Interogarea echivalentă Django ORM ar arăta în schimb ca următorul cod Python:
# obț ineț i toț i cei din codul poș tal 94107 ș i atribuiț i-l variabilei utilizatori

users = [Link](zip_code=94107)
Capacitatea de a scrie cod Python în loc de SQL poate accelera dezvoltarea aplicaț iilor web,
mai ales la începutul unui proiect.
Clasa Python == Tabel SQL
Instanț a Clasei == Rând în Tabel
Cele mai cunoscute ORM-uri Python de astăzi sunt:

1. SQLAlchemy
2. Peewee
3. ORM-ul Django
4. PonyORM
5. SQLObject
6. Tortoise ORM

SQLAlchemy este o bibliotecă care facilitează comunicarea între programele Python ș i


baze de date.

Cel mai adesea, această bibliotecă este utilizată ca un instrument de mapare obiect-relaț ie (ORM) care

traduce clasele Python în tabele în baze de date relaț ionale ș i converteș te automat funcț ia
apele la instrucț iunile SQL.

SQLAlchemy oferă o interfaț ă standard care permite dezvoltatorilor să creeze aplicaț ii independente de baza de date.

code to communicate with a wide variety of database engines.


ORM cu SqlAlchemy: ([Link]

S-ar putea să vă placă și