Tot ce trebuie să știți despre hărțile Python și Object-Relational
Este posibil să fi auzit despre maparea obiect-relațională (ORM). S-ar putea sa fi folosit chiar si unul, dar ce anume sunt? Și cum le folosiți în Python?
Iată tot ce trebuie să știți despre ORM și Python.
Ce este ORM?
Object-relational mapping (ORM) este o tehnică de programare utilizată pentru a accesa o bază de date. Expune baza de date într-o serie de obiecte. Nu trebuie să scrieți comenzi SQL pentru a insera sau a prelua date, utilizați o serie de atribute și metode atașate obiectelor.
S-ar putea suna complex și inutil, dar vă pot economisi mult timp și vă pot ajuta să controlați accesul la baza dvs. de date.
Iată un exemplu. Spuneți că ori de câte ori introduceți o parolă în baza de date doriți să o dezarhiveze, așa cum este explicat în parola de securitate a site-ului Fiecare site securizat face acest lucru cu parola dvs. Fiecare site securizat face acest lucru cu parola dvs. V-ați întrebat vreodată cum site-urile păstrează parola în siguranță de date încălcări? Citeste mai mult . Aceasta nu este o problemă pentru cazurile simple de utilizare - efectuați calculul înainte de a le introduce. Dar dacă trebuie să introduceți o înregistrare în multe locuri din cod? Ce se întâmplă dacă un alt programator se introduce în masa dvs. și nu știți?
Folosind un ORM, puteți scrie cod pentru a vă asigura că oricând și oriunde este accesat un rând sau un câmp din baza dvs. de date, celălalt cod personalizat este executat mai întâi.
Acest lucru acționează și ca a “singura sursă de adevăr”. Dacă doriți să modificați un calcul personalizat, trebuie doar să îl modificați într-un singur loc, nu în mai multe. Este posibil să se efectueze multe dintre aceste principii cu ajutorul programării orientate obiect (OOP) în Python Ghidul unui începător pentru programarea orientată pe obiecte Python Ghidul începătorului pentru programarea orientată pe obiecte Python Pentru a profita din plin de punctele forte ale Python, veți dori să aflați cum Python funcționează cu programare orientată pe obiecte (OOP). Citiți mai mult, dar ORM-urile lucrează în tandem cu principiile OOP pentru a controla accesul la o bază de date.
Există anumite lucruri de urmărit atunci când se folosește un ORM și există circumstanțe în care este posibil să nu doriți să utilizați unul, dar acestea sunt, în general, considerate a fi un lucru bun pentru a avea, în special într-o bază de cod mare.
ORM-uri în Python Utilizând SQLAlchemy
Ca multe dintre sarcinile din Python, este mai rapid și mai ușor să importați un modul decât să scrieți propriul dvs. Desigur, este posibil să vă scrieți propriul ORM, dar de ce să reinventați roata?
Următoarele exemple folosesc SQLAlchemy, un popular Python ORM, dar multe dintre principii se aplică indiferent de implementare.
Configurarea Python pentru SQLAlchemy
Înainte de a sari imediat, va trebui să configurați mașina pentru dezvoltarea Python cu SQLAlchemy.
Va trebui să utilizați Python 3.6 pentru a urmări împreună cu aceste exemple. În timp ce versiunile mai vechi vor funcționa, codul de mai jos va necesita o modificare înainte de a se executa. Nu sunteți sigur de diferențele? Întrebări frecvente Python Întrebările cele mai frecvente despre programarea Python Cele mai frecvente întrebări despre programarea Python În acest articol, vă vom învăța tot ce trebuie să știți despre Python ca începător. Citește mai mult acoperă toate diferențele.
Înainte de a vă codifica, trebuie să configurați un mediu Python Aflați cum să utilizați mediul virtual Python Aflați cum să utilizați mediul virtual Python Fie că sunteți un dezvoltator experimentat Python, fie că începeți să învățați cum să configurați un mediu virtual este esențial pentru orice proiect Python. Citiți mai multe, ceea ce va preveni problemele cu alte pachete Python importate.
Asigurați-vă că aveți PIP, managerul de pachete Python Cum să instalați PIP pentru Python pe Windows, Mac și Linux Cum să instalați PIP pentru Python pe Windows, Mac și Linux Mulți dezvoltatori Python se bazează pe un instrument numit PIP pentru Python pentru a face totul mult mai ușor și mai rapid. Iată cum se instalează PIP. Citește mai mult instalat, care vine cu majoritatea versiunilor moderne ale Python.
Odată ce sunteți pregătiți să mergeți, puteți începe prin a vă pregăti SQLAlchemy. Din mediul Python din linia de comandă, instalați SQLAlchemy cu instalare pip comanda:
pip instalare SQLAlchemy-1.2.9
1.2.9 este numărul versiunii. Puteți lăsa acest lucru pentru a obține cel mai recent pachet, dar este o practică bună să fii specific. Nu știți când o nouă versiune poate rupe codul dvs. curent.
Acum sunteți gata să începeți codarea. Este posibil să aveți nevoie să vă pregătiți baza de date pentru a accepta o conexiune Python, dar următoarele exemple toate utilizează o bază de date SQLite creată în memorie mai jos.
Modele în SQLAlchemy
Una dintre componentele cheie ale ORM este a model. Aceasta este o clasă Python care arată ce ar trebui să arate un tabel și cum ar trebui să funcționeze. Este versiunea ORM a CREATE TABLE instrucțiune în SQL. Aveți nevoie de un model pentru fiecare tabel din baza dvs. de date.
Deschideți editorul text sau IDE preferat și creați un nou fișier numit test.py. Introduceți codul inițial, salvați fișierul și executați-l:
de la sqlalchemy import create_engine de la sqlalchemy.ext.declarative import declarative_base Base = declarative_base () engine = create_engine ('sqlite: //') # Creați baza de date în memorie Base.metadata.create_all (motor) # Creați toate tabelele din baza de date
Acest cod face mai multe lucruri. Importurile sunt necesare pentru ca Python să înțeleagă de unde să găsească modulele SQLAlchemy de care are nevoie. Modelele dvs. vor utiliza declarative_base mai târziu, și configurează orice modele noi pentru a funcționa conform așteptărilor.
create_engine metoda creează o nouă conexiune la baza dvs. de date. Dacă aveți deja o bază de date, va trebui să vă schimbați SQLite: // în baza de date URI. Ca atare, acest cod va crea o nouă bază de date numai în memorie. Baza de date este distrusă odată ce codul dvs. se termină executând.
În cele din urmă, create_all metoda creează toate tabelele definite în modurile dvs. în baza de date. Pe măsură ce nu ați definit încă niciun model, nimic nu se va întâmpla. Continuați și rulați acest cod, pentru a vă asigura că nu aveți probleme sau greșeli.
Să facem un model. Adăugați un alt import în partea de sus a fișierului:
din coloana de import pentru sqlalchemy, Integer, String
Aceasta importă Coloană, Întreg, și Şir module din SQLAlchemy. Acestea definesc modul în care funcționează tabelele de baze de date, câmpurile, coloanele și tipurile de date.
Dedesubt declarative_base, creați clasa de model:
(50), nullable = False) color = Coloană (String (50), nullable = False)
Acest exemplu simplu utilizează mașini, dar tabelele dvs. pot conține orice date.
Fiecare clasă trebuie să moștenească Baza. Numele tabelului de bază de date este definit în __tablename__. Acest lucru ar trebui să fie același cu numele clasei, dar aceasta este doar o recomandare și nimic nu se va rupe dacă nu se potrivesc.
În cele din urmă, fiecare coloană este definită ca o variabilă python în cadrul clasei. Se folosesc diferite tipuri de date, și cheia principala atribut spune SQLAlchemy pentru a crea id coloană ca cheie primară.
Continuați și adăugați un ultim import, de data aceasta pentru Cheie externă modul. Adăugați acest lucru alături de dvs. Coloană import:
din coloana de importuri sqlalchemy, ForeignKey, Integer, String
Acum creați oa doua clasă de model. Această clasă este numită CarOwners, și stochează detaliile proprietarului anumitor mașini stocate în Mașini masa:
Clasa (String (50), nullable = False) vârstă = Coloană (Integer, nullabil = False) car_id = Coloană (Integer, ForeignKey ('cars.id')) masina = relatie (Masini)
Există mai multe atribute noi introduse aici. car_id câmpul este definit ca o cheie străină. Este legată de id în autoturisme masa. Observați cum se utilizează numele tabelului cu litere mici, insetat cu numele clasei majuscule.
În cele din urmă, un atribut al mașină este definit ca a relaţie. Acest lucru permite modelului dvs. să acceseze Mașini tabel prin această variabilă. Acest lucru este demonstrat mai jos.
Dacă executați acest cod acum, veți vedea că nu se întâmplă nimic. Acest lucru se datorează faptului că nu i-ați spus să facă ceva vizibil încă.
Obiecte din SQLAlchemy
Acum, când modelele dvs. sunt create, puteți să accesați obiectele și să citiți și să scrieți date. Este o idee bună să plasați logica în propria clasă și fișier, dar deocamdată, ea poate rămâne alături de modele.
Scrierea datelor
În acest exemplu, trebuie să introduceți câteva date în baza de date înainte de ao citi. Dacă utilizați o bază de date existentă, este posibil să aveți deja date. În orice caz, este încă foarte util să știi cum să introduci date.
Ați putea fi obișnuit să scrieți INTRODUCE declarații în SQL. SQLAlchema se ocupă de asta pentru tine. Iată cum să inserați un rând în Mașini model. Începeți cu un nou import pentru sessionmaker:
de la sqlalchemy.orm importator de sesiuni de import
Acest lucru este necesar pentru a crea sesiune și DBSession obiecte care sunt folosite pentru citirea și scrierea datelor:
DBSession = sessionmaker (bind = motor) sesiune = DBSession ()
Pune-ți asta sub tine create_all afirmație:
car1 = Masini (make = "Ford", culoare = "argint") session.add (car1) session.commit ()
Să defalcăm codul ăsta. Variabila auto1 este definit ca un obiect bazat pe Mașini model. Marca și culoarea sunt stabilite ca parametri. Acest lucru este ca și cum ai spune “fă-mi o mașină, dar nu-l scrie încă în baza de date”. Această mașină există în memorie, dar așteaptă să fie scrisă.
Adăugați mașina la sesiune cu session.add, și apoi scrie-o în baza de date cu session.commit.
Acum, să adăugăm un proprietar:
proprietar1 = CarOwners (nume = "Joe", vârstă = "99", car_id = (car1.id)) session.add (owner1) session.commit
Acest cod este aproape identic cu inserția precedentă pentru Mașini model. Principala diferență aici este aceea car_id este o cheie străină, deci are nevoie de un id de rând care există în celălalt tabel. Acest lucru este accesat prin car1.id proprietate.
Nu trebuie să interogați baza de date sau să returnați toate ID-urile, deoarece SQLAlchemy se ocupă de acest lucru pentru dvs. (atâta timp cât vă angajați mai întâi datele).
Citirea datelor
Odată ce ați scris câteva date, puteți începe să le citiți înapoi. Iată cum să interogați Mașini și CarOwners Mese:
rezultat = session.query (Masini) .all ()
Este atât de simplu. Prin utilizarea funcției întrebare metode găsite în sesiune, specificați modelul, apoi utilizați toate pentru a obține toate rezultatele. Dacă știți că va exista doar un rezultat, atunci puteți folosi primul metodă:
rezultat = session.query (Cars) .first ()
După ce ați interogat modelul și ați stocat rezultatele returnate într-o variabilă, puteți accesa datele prin intermediul obiectului:
print (rezultat [0] .color)
Aceasta imprimă culoarea “argint”, deoarece acea înregistrare este primul rând. Aveți posibilitatea să faceți buclă peste obiectul rezultat, dacă doriți.
Pe măsură ce ați definit relația din modelul dvs., este posibil să accesați datele din tabelele aferente fără a specifica o asociere:
rezultatul = session.query (CarOwners) .all () print (rezultat [0] .name) print (rezultat [0] .car.color)
Acest lucru funcționează deoarece modelul dvs. conține detalii despre structura tabelului dvs. și mașină atributul a fost definit ca o legătură către autoturisme masa.
Ce nu trebuie să-ți placă cu ORM-uri?
Acest tutorial se referea doar la elementele de bază, dar odată ce le-ați atârnat de acestea, puteți trece la subiectele avansate. Există unele posibile dezavantaje pentru ORM:
- Trebuie să vă scrieți modelul înainte ca orice interogare să poată fi rulată.
- Este o altă sintaxă nouă de învățat.
- Ar putea fi prea complex pentru nevoi simple.
- Trebuie să aveți un design bun de bază pentru a începe cu.
Aceste chestiuni nu sunt o problemă majoră pe cont propriu, dar sunt lucruri de urmărit. Dacă lucrați cu o bază de date existentă, este posibil să fiți prinși.
Dacă nu sunteți convins că ORM este instrumentul potrivit pentru dvs., asigurați-vă că citiți despre comenzile SQL importante pe care trebuie să le cunoască programatorii 13 Comenzi SQL cele mai importante Orice programator ar trebui să știe 13 Comenzi SQL cele mai importante Orice programator ar trebui să știe Fiecare mare sau dinamic site-ul web folosește într-un fel o bază de date, iar când este combinat cu limbajul structurat de interogări (SQL), posibilitățile de manipulare a datelor sunt cu adevărat nesfârșite. Citeste mai mult .
Explorați mai multe despre: Tutoriale de codificare, Python, SQL.