Kõik, mida peate teadma Pythoni ja objektide seoste kaartide kohta

Kõik, mida peate teadma Pythoni ja objektide seoste kaartide kohta

Võimalik, et olete kuulnud objektidevahelisest kaardistamisest (ORM). Võib -olla kasutasite isegi ühte, kuid mis need täpselt on? Ja kuidas neid Pythonis kasutada?





Siin on kõik, mida peate teadma ORM -ide ja Pythoni kohta.





Mis on ORM?

Objekt-relatsiooniline kaardistamine (ORM) on programmeerimistehnika, mida kasutatakse andmebaasile juurdepääsemiseks. See avab teie andmebaasi objektide seeriaks. Andmete sisestamiseks või toomiseks ei pea te kirjutama SQL -käske, kasutate objektide külge kinnitatud atribuutide ja meetodite seeriat.





See võib tunduda keeruline ja tarbetu, kuid need võivad säästa palju aega ja aidata kontrollida juurdepääsu teie andmebaasile.

Siin on näide. Ütle, et alati, kui sisestate parooli oma andmebaasi, soovite selle räsida, nagu on selgitatud veebisaidi parooli turvalisuses. Lihtsate kasutusjuhtumite puhul pole see probleem-arvutate enne sisestamist. Aga mis siis, kui peate koodi sisestama kirje paljudesse kohtadesse? Mis siis, kui mõni teine ​​programmeerija lisab teie tabelisse ja te ei tea?



ORM -i abil saate kirjutada koodi tagamaks, et igal ajal ja igal pool, kus teie andmebaasi mis tahes reale või väljale juurde pääseb, täidetakse kõigepealt teie teine ​​kohandatud kood.

See toimib ka „ühe tõeallikana”. Kui soovite kohandatud arvutust muuta, peate seda muutma ainult ühes kohas, mitte mitmes. Paljusid neist põhimõtetest on võimalik täita objektipõhine programmeerimine (OOP) Pythonis , kuid ORM -id töötavad koos OOP -põhimõtetega, et kontrollida juurdepääsu andmebaasile.





ORM -i kasutamisel tuleb teatud asju jälgida ja on olukordi, kus te ei soovi seda kasutada, kuid üldiselt peetakse neid heaks, eriti suures koodibaasis.

ORM -id Pythonis SQLAlchemy abil

Nagu paljud Pythonis tehtavad ülesanded, on ka mooduli importimine kiirem ja lihtsam kui enda kirjutamine. Loomulikult on võimalik oma ORM kirjutada, kuid miks leiutada ratas uuesti?





Kõik järgnevad näited kasutavad SQLAlchemy , populaarne Pythoni ORM, kuid paljud põhimõtted kehtivad olenemata rakendamisest.

Pythoni seadistamine SQLAlchemy jaoks

Enne sissehüppamist peate seadistama oma masina Pythoni arendamiseks SQLAlchemy abil.

Nende näidete järgimiseks peate kasutama Python 3.6. Kuigi vanemad versioonid töötavad, vajab allolev kood enne käivitamist mõningaid muudatusi. Kas pole erinevustes kindel? Meie Pythoni KKK hõlmab kõiki erinevusi.

Enne kodeerimist peaksite seadistama Pythoni keskkonna, mis hoiab ära probleemid teiste imporditud Pythoni pakettidega.

Veenduge, et teil oleks PIP, Pythoni paketihaldur installitud, mis on varustatud enamiku kaasaegsete Pythoni versioonidega.

Kui olete valmis minema, võite alustada SQLAlchemy ettevalmistamisega. Installige käsureal oma Pythoni keskkonnast SQLAlchemy koos pip paigaldada käsk:

pip install SQLAlchemy-1.2.9

The 1.2.9 on versiooni number. Viimase paketi hankimiseks võite selle välja jätta, kuid konkreetne on hea tava. Te ei tea, millal uus versioon võib teie praeguse koodi rikkuda.

Nüüd olete valmis kodeerimist alustama. Võimalik, et peate Pythoni ühenduse aktsepteerimiseks oma andmebaasi ette valmistama, kuid kõik järgmised näited kasutavad SQLite andmebaas, mis on loodud allpool mälus.

SQLAlchemy mudelid

ORM -i üks põhikomponente on a mudel . See on Pythoni klass, mis kirjeldab, kuidas tabel välja peaks nägema ja kuidas see peaks toimima. See on ORM -i versioon LOO TABEL avaldus SQL -is. Iga andmebaasi tabeli jaoks on vaja mudelit.

Avage oma lemmiktekstiredaktor või IDE ja looge uus fail nimega test.py . Sisestage see stardikood, salvestage fail ja käivitage see:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine('sqlite://') # Create the database in memory
Base.metadata.create_all(engine) # Create all the tables in the database

See kood teeb mitmeid asju. Import on vajalik selleks, et Python saaks aru, kust leida vajalikke SQLAlchemy mooduleid. Teie mudelid kasutavad deklaratiivne_baas hiljem ja see seadistab kõik uued mudelid ootuspäraselt tööle.

The create_engine meetod loob teie andmebaasiga uue ühenduse. Kui teil on juba andmebaas, peate seda muutma sqlite: // oma andmebaasi URI -le. See kood loob uue andmebaasi ainult mällu. Andmebaas hävitatakse, kui teie kood on täitmise lõpetanud.

Lõpuks, create_all meetod loob kõik teie režiimides määratletud tabelid oma andmebaasi. Kuna te pole veel ühtegi mudelit määratlenud, ei juhtu midagi. Jätkake ja käivitage see kood, et teil pole probleeme ega kirjavigu.

Teeme mudeli. Lisage oma faili ülaossa veel üks import:

from sqlalchemy import Column, Integer, String

See impordib Veerg , Täisarv ja String SQLAlchemy moodulid. Need määravad, kuidas andmebaasi tabelid, väljad, veerud ja andmetüübid töötavad.

Selle all deklaratiivne_baas , looge oma mudeliklass:

class Cars(Base):
__tablename__ = 'cars'
id = Column(Integer, primary_key=True)
make = Column(String(50), nullable=False)
color = Column(String(50), nullable=False)

See lihtne näide kasutab autosid, kuid teie tabelid võivad sisaldada mis tahes andmeid.

Iga klass peab pärima Alus . Teie andmebaasi tabeli nimi on määratletud __tablename__ . See peaks olema sama, mis klassi nimi, kuid see on vaid soovitus ja miski ei purune, kui need ei sobi.

Lõpuks määratletakse iga veerg klassis muutujana python. Kasutatakse erinevaid andmetüüpe ja esmane_võti atribuut käsib SQLAlchemy -l luua id veergu esmase võtmena.

Jätkake ja lisage viimane import, seekord ForeignKey moodul. Lisage see oma kõrval Veerg import:

from sqlalchemy import Column, ForeignKey, Integer, String

Nüüd looge teine ​​mudeliklass. Seda klassi nimetatakse Autoomanikud ja salvestab kaustas salvestatud konkreetsete autode omanike andmed Autod tabel:

class CarOwners(Base):
__tablename__ = 'carowners'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
age = Column(Integer, nullable=False)
car_id = Column(Integer, ForeignKey('cars.id'))
car = relationship(Cars)

Siin tutvustatakse mitmeid uusi atribuute. The auto_id väli on määratletud kui välisvõti. See on seotud id aastal autod tabel. Pange tähele, kuidas väiketähtede tabeli nime kasutatakse, kirjutades suurtähtede klassi nime.

Lõpuks atribuut auto on määratletud kui a suhe . See võimaldab teie mudelil juurde pääseda Autod tabelit selle muutuja kaudu. Seda demonstreeritakse allpool.

Kui käivitate selle koodi praegu, näete, et midagi ei juhtu. Seda seetõttu, et te pole veel käskinud tal midagi märgatavat teha.

SQLAlchemy objektid

Nüüd, kui teie mudelid on loodud, saate hakata objektidele juurde pääsema ning andmeid lugeda ja kirjutada. On hea mõte paigutada oma loogika oma klassi ja faili, kuid praegu võib see jääda mudelite kõrvale.

Andmete kirjutamine

Selles näites peate enne andmete lugemist andmebaasi sisestama mõned andmed. Kui kasutate olemasolevat andmebaasi, võib teil juba andmeid olla. Mõlemal juhul on endiselt väga kasulik teada, kuidas andmeid sisestada.

Võib -olla olete kirjutamisega harjunud SISESTA avaldused SQL -is. SQLAlchemy tegeleb sellega teie eest. Siit saate teada, kuidas sisestada üks rida Autod mudel. Alustage uue importimisega istungite tegija :

from sqlalchemy.orm import sessionmaker

Seda on vaja luua seanss ja DBSession objektid, mida kasutatakse andmete lugemiseks ja kirjutamiseks:

DBSession = sessionmaker(bind=engine)
session = DBSession()

Nüüd pane see oma alla create_all avaldus:

car1 = Cars(
make='Ford',
color='silver'
)
session.add(car1)
session.commit()

Jagame selle koodi. Muutuja auto 1 on määratletud objektina, mis põhineb Autod mudel. Selle mark ja värv on seatud parameetriteks. See on nagu ütlemine „tee mulle auto, aga ära kirjuta seda veel andmebaasi”. See auto on mälus olemas, kuid ootab kirjutamist.

Lisage auto seansile nupuga seanss.lisa ja seejärel kirjutage see andmebaasi seanss.kohustus .

Nüüd lisame omaniku:

owner1 = CarOwners(
name='Joe',
age='99',
car_id=(car1.id)
)
session.add(owner1)
session.commit()

See kood on peaaegu identne Autod mudel. Peamine erinevus on siin see auto_id on võti, seega vajab teises tabelis olevat rea ID -d. Sellele pääseb juurde auto1.id vara.

Te ei pea andmebaasist päringuid esitama ega ID -sid tagastama, kuna SQLAlchemy tegeleb selle eest teiega (seni, kuni esmalt andmed sidute).

Andmete lugemine

Kui olete mõned andmed kirjutanud, võite hakata neid tagasi lugema. Siit saate teada, kuidas päringut esitada Autod ja Autoomanikud tabelid:

result = session.query(Cars).all()

Nii lihtne see ongi. Kasutades päring meetodist leitud seanss , määrate mudeli ja seejärel kasutate kõik meetod kõigi tulemuste hankimiseks. Kui teate, et tulemust on ainult üks, saate seda kasutada esimene meetod:

result = session.query(Cars).first()

Kui olete mudeli kohta päringu teinud ja tagastatud tulemused muutujale salvestanud, pääsete andmetele juurde objekti kaudu:

print(result[0].color)

See prindib värvi 'hõbe', kuna see kirje on esimene rida. Soovi korral saate tulemusobjekti üle loopida.

Kui määrasite seose oma mudelis, on võimalik juurde pääseda seotud tabelite andmetele ilma liitumist määramata.

result = session.query(CarOwners).all()
print(result[0].name)
print(result[0].car.color)

See toimib, kuna teie mudel sisaldab teie tabeli struktuuri üksikasju ja auto atribuut määratleti lingina autod tabel.

Mis ei meeldi ORM -ide puhul?

See õpetus hõlmas ainult põhitõdesid, kuid kui olete neist aru saanud, saate edasi liikuda täpsemate teemade juurde. ORM -idel on mõned negatiivsed küljed:

  • Enne päringute esitamist peate oma mudeli kirjutama.
  • See on veel üks uus süntaks, mida õppida.
  • See võib lihtsate vajaduste jaoks olla liiga keeruline.
  • Alustuseks peab teil olema hea andmebaasi kujundus.

Need probleemid ei ole iseenesest suur probleem, kuid need on asjad, mida tuleb jälgida. Kui töötate olemasoleva andmebaasiga, võite vahele jääda.

Kui te pole veendunud, et ORM on teie jaoks õige tööriist, lugege kindlasti selle kohta olulised SQL -i käsud, mida programmeerijad peaksid teadma .

Jaga Jaga Piiksuma E -post Kas peaksite kohe Windows 11 -le üle minema?

Windows 11 on peagi saadaval, kuid kas peaksite värskendama nii kiiresti kui võimalik või ootama paar nädalat? Uurime välja.

Loe edasi
Seotud teemad
  • Programmeerimine
  • Python
  • SQL
  • Kodeerimise õpetused
Autori kohta Joe Coburn(136 artiklit avaldatud)

Joe on lõpetanud arvutiteaduse Ühendkuningriigi Lincolni ülikoolis. Ta on professionaalne tarkvaraarendaja ja kui ta ei lennuta droonidega ega kirjuta muusikat, võib teda sageli leida pildistamas või videoid tootmas.

kuidas leida kõiki veebisaidi kontosid, mis on seotud minu e -posti aadressiga?
Rohkem Joe Coburnilt

Telli meie uudiskiri

Liituge meie uudiskirjaga, et saada tehnilisi näpunäiteid, ülevaateid, tasuta e -raamatuid ja eksklusiivseid pakkumisi!

Tellimiseks klõpsake siin