Viss, kas jums jāzina par Python un objektu relāciju kartēm

Viss, kas jums jāzina par Python un objektu relāciju kartēm

Jūs, iespējams, esat dzirdējuši par objektu relāciju kartēšanu (ORM). Jūs, iespējams, pat izmantojāt vienu, bet kas tieši tie ir? Un kā jūs tos izmantojat Python?





Šeit ir viss, kas jums jāzina par ORM un Python.





Kas ir ORM?

Objektu relāciju kartēšana (ORM) ir programmēšanas tehnika, ko izmanto, lai piekļūtu datu bāzei. Tas atklāj jūsu datu bāzi objektu sērijā. Lai ievietotu vai izgūtu datus, jums nav jāraksta SQL komandas, jūs izmantojat objektiem pievienotu atribūtu un metožu sēriju.





Tas var likties sarežģīti un nevajadzīgi, taču tie var ietaupīt daudz laika un palīdzēt kontrolēt piekļuvi jūsu datu bāzei.

Šeit ir piemērs. Sakiet, ka ikreiz, kad savā datu bāzē ievietojat paroli, kuru vēlaties sajaukt, kā paskaidrots vietnes paroļu drošībā. Vienkāršu lietošanas gadījumu gadījumā tā nav problēma-pirms ievietošanas veicat aprēķinus. Bet ko darīt, ja daudzās koda vietās ir jāievieto ieraksts? Ko darīt, ja jūsu galdā ievieto cits programmētājs un jūs par to nezināt?



Izmantojot ORM, jūs varat rakstīt kodu, lai nodrošinātu, ka vienmēr un visur, kur tiek piekļūta jebkurai datu bāzes rindai vai laukam, vispirms tiek izpildīts jūsu cits pielāgotais kods.

Tas darbojas arī kā “viens patiesības avots”. Ja vēlaties mainīt pielāgotu aprēķinu, tas ir jāmaina tikai vienā vietā, nevis vairākās. Ir iespējams īstenot daudzus no šiem principiem objektorientēta programmēšana (OOP) programmā Python , bet ORM darbojas kopā ar OOP principiem, lai kontrolētu piekļuvi datu bāzei.





Lietojot ORM, ir dažas lietas, kurām jāpievērš uzmanība, un ir apstākļi, kad jūs, iespējams, nevēlaties to izmantot, taču tās parasti tiek uzskatītas par labu, jo īpaši lielā koda bāzē.

ORM Python, izmantojot SQLAlchemy

Tāpat kā daudzi Python uzdevumi, moduļa importēšana ir ātrāka un vienkāršāka nekā paša rakstīšana. Protams, ir iespējams uzrakstīt savu ORM, bet kāpēc no jauna izgudrot riteni?





Visi tālāk minētie piemēri tiek izmantoti SQLAlchemy , populārs Python ORM, taču daudzi principi ir spēkā neatkarīgi no ieviešanas.

Python iestatīšana SQLAlchemy

Pirms lekt tieši, jums būs jāiestata mašīna Python izstrādei, izmantojot SQLAlchemy.

Lai sekotu šiem piemēriem, jums jāizmanto Python 3.6. Lai gan vecākas versijas darbosies, zemāk redzamais kods būs jāmaina, pirms tas tiks palaists. Vai neesat pārliecināts par atšķirībām? Mūsu Python FAQ aptver visas atšķirības.

Pirms kodēšanas jums jāiestata Python vide, kas novērsīs problēmas ar citām importētajām Python pakotnēm.

Pārliecinieties, ka jums ir PIP, Python pakotņu pārvaldnieks ir instalēta, kurai ir vismodernākās Python versijas.

Kad esat gatavs doties, varat sākt, sagatavojot SQLAlchemy. Komandrindā savā Python vidē instalējiet SQLAlchemy ar pip instalēt komanda:

pip install SQLAlchemy-1.2.9

The 1.2.9 ir versijas numurs. Varat to izslēgt, lai iegūtu jaunāko pakotni, taču laba prakse ir būt konkrētam. Jūs nezināt, kad jauns laidiens var salauzt jūsu pašreizējo kodu.

Tagad jūs esat gatavs sākt kodēšanu. Jums, iespējams, būs jāsagatavo datubāze, lai pieņemtu Python savienojumu, taču visi piemēri izmanto SQLite datu bāze, kas izveidota atmiņā zemāk.

Modeļi SQLAlchemy

Viena no ORM galvenajām sastāvdaļām ir a modelis . Šī ir Python klase, kurā izklāstīts, kā tabulai vajadzētu izskatīties un kā tai vajadzētu darboties. Tā ir ORM versija IZVEIDOT TABULU paziņojums SQL. Katrai datu bāzes tabulai ir nepieciešams modelis.

Atveriet savu iecienīto teksta redaktoru vai IDE un izveidojiet jaunu failu ar nosaukumu test.py . Ievadiet šo sākuma kodu, saglabājiet failu un palaidiet to:

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

Šis kods veic vairākas lietas. Importēšana ir nepieciešama, lai Python saprastu, kur atrast nepieciešamos SQLAlchemy moduļus. Jūsu modeļi izmantos deklaratīvā bāze vēlāk, un tas konfigurē visus jaunos modeļus, lai tie darbotos, kā paredzēts.

The create_engine metode izveido jaunu savienojumu ar jūsu datu bāzi. Ja jums jau ir datu bāze, jums tas būs jāmaina sqlite: // datubāzes URI. Šis kods izveidos jaunu datu bāzi tikai atmiņā. Datu bāze tiek iznīcināta, tiklīdz jūsu kods ir izpildīts.

Visbeidzot, create_all metode izveido visas jūsu režīmos noteiktās tabulas savā datu bāzē. Tā kā jūs vēl neesat definējis nevienu modeli, nekas nenotiks. Dodieties uz priekšu un palaidiet šo kodu, lai pārliecinātos, ka jums nav problēmu vai drukas kļūdu.

Izveidosim modeli. Pievienojiet faila augšdaļai citu importēšanu:

from sqlalchemy import Column, Integer, String

Tas importē Sleja , Vesels skaitlis , un Stīga moduļi no SQLAlchemy. Tie nosaka, kā darbojas datu bāzes tabulas, lauki, kolonnas un datu tipi.

Zem deklaratīvā bāze , izveidojiet savu modeļa klasi:

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

Šajā vienkāršajā piemērā tiek izmantotas automašīnas, taču jūsu tabulās var būt jebkuri dati.

Katrai klasei ir jāmanto Bāze . Jūsu datu bāzes tabulas nosaukums ir definēts __tablename__ . Tam vajadzētu būt tādam pašam kā klases nosaukumam, taču tas ir tikai ieteikums, un nekas nesadalīsies, ja tie neatbilst.

Visbeidzot, katra kolonna klasē ir definēta kā python mainīgais. Tiek izmantoti dažādi datu veidi, un primārais_atslēga atribūts liek SQLAlchemy izveidot id kolonnu kā primāro atslēgu.

Iet uz priekšu un pievienojiet pēdējo importēšanas reizi, šoreiz Sveša atslēga modulis. Pievienojiet šo kopā ar savu Sleja imports:

from sqlalchemy import Column, ForeignKey, Integer, String

Tagad izveidojiet otro modeļu klasi. Šo klasi sauc Automašīnu īpašnieki un saglabā īpašnieka informāciju par konkrētām automašīnām, kas tiek glabātas Automašīnas tabula:

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)

Šeit ir ieviesti vairāki jauni atribūti. The auto_id lauks ir definēts kā ārējā atslēga. Tas ir saistīts ar id iekš automašīnas tabula. Ievērojiet, kā tiek izmantots mazo burtu tabulas nosaukums, ievadot lielo burtu klases nosaukumu.

Visbeidzot, atribūts automašīna ir definēts kā a attiecības . Tas ļauj jūsu modelim piekļūt Automašīnas tabulā, izmantojot šo mainīgo. Tas ir parādīts zemāk.

Palaižot šo kodu tagad, jūs redzēsit, ka nekas nenotiek. Tas ir tāpēc, ka jūs vēl neesat teicis tai darīt kaut ko pamanāmu.

Objekti SQLAlchemy

Tagad, kad ir izveidoti jūsu modeļi, varat sākt piekļūt objektiem un lasīt un rakstīt datus. Ir laba ideja ievietot savu loģiku savā klasē un failā, taču pagaidām tā var palikt līdzās modeļiem.

Datu rakstīšana

Šajā piemērā daži dati ir jāievieto datu bāzē, lai tos varētu izlasīt. Ja izmantojat esošu datu bāzi, jums, iespējams, jau ir dati. Jebkurā gadījumā joprojām ir ļoti noderīgi zināt, kā ievietot datus.

Jūs, iespējams, esat pieradis rakstīt IEVIETOT paziņojumi SQL. SQLAlchemy to risina jūsu vietā. Lūk, kā rindā ievietot vienu rindu Automašīnas modelis. Sāciet ar jaunu importēšanu domēnam sesiju veidotājs :

from sqlalchemy.orm import sessionmaker

Tas ir nepieciešams, lai izveidotu sesija un DBSession objekti, kurus izmanto datu lasīšanai un rakstīšanai:

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

Tagad ielieciet to zem sava create_all paziņojums, apgalvojums:

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

Sadalīsim šo kodu. Mainīgais automašīna 1 ir definēts kā objekts, kura pamatā ir Automašīnas modelis. Tā marka un krāsa ir iestatīti kā parametri. Tas ir tāpat kā teikt: “Uztaisiet man automašīnu, bet vēl nerakstiet to datu bāzē”. Šī automašīna pastāv atmiņā, bet gaida rakstīšanu.

Pievienojiet automašīnu sesijai ar sesija.pievienot un pēc tam ierakstiet to datu bāzē ar sesija.uzņemties .

Tagad pievienosim īpašnieku:

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

Šis kods ir gandrīz identisks iepriekšējam ieliktnim Automašīnas modelis. Galvenā atšķirība šeit ir tā auto_id ir sveša atslēga, tāpēc tai ir nepieciešams rindas ID, kas pastāv citā tabulā. Tam var piekļūt, izmantojot auto1.id īpašums.

Jums nav jāveic vaicājumi datu bāzē vai jāatgriež ID, jo SQLAlchemy to apstrādā jūsu vietā (ja vien jūs vispirms veicat datus).

Datu lasīšana

Kad esat uzrakstījis dažus datus, varat sākt to lasīt atpakaļ. Lūk, kā veikt vaicājumu Automašīnas un Automašīnu īpašnieki tabulas:

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

Tas ir tik vienkārši. Izmantojot vaicājums metode, kas atrodama sadaļā sesija , jūs norādāt modeli un pēc tam izmantojat visas metode visu rezultātu iegūšanai. Ja zināt, ka būs tikai viens rezultāts, varat izmantot pirmais metode:

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

Kad esat vaicājis modeli un saglabājis atgrieztos rezultātus mainīgajā, varat piekļūt datiem, izmantojot objektu:

print(result[0].color)

Tādējādi tiek izdrukāta krāsa “sudrabs”, jo šis ieraksts ir pirmā rinda. Ja vēlaties, varat pārvarēt rezultātu objektu.

Definējot attiecības savā modelī, ir iespējams piekļūt datiem saistītajās tabulās, nenorādot savienošanu:

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

Tas darbojas, jo jūsu modelī ir informācija par jūsu tabulas struktūru un automašīna atribūts tika definēts kā saite uz automašīnas tabula.

Kas nepatīk ORM?

Šī apmācība aptvēra tikai pašus pamatus, taču, tiklīdz esat tos apguvis, varat pāriet uz papildu tēmām. ORM ir daži iespējamie trūkumi:

  • Lai varētu izpildīt vaicājumus, jums ir jāraksta modelis.
  • Tā ir vēl viena jauna sintakse, kas jāapgūst.
  • Tas var būt pārāk sarežģīts vienkāršām vajadzībām.
  • Lai sāktu, jums ir jābūt labam datu bāzes dizainam.

Šīs problēmas pašas par sevi nav liela problēma, taču tās ir lietas, kas jāuzmanās. Ja strādājat ar esošu datu bāzi, jūs, iespējams, tiksiet noķerts.

Ja neesat pārliecināts, ka ORM ir jums piemērots rīks, tad noteikti izlasiet par to svarīgas SQL komandas, kas jāzina programmētājiem .

Kopīgot Kopīgot Čivināt E -pasts Vai jums nekavējoties jājaunina uz Windows 11?

Drīzumā parādīsies operētājsistēma Windows 11, bet vai jums vajadzētu to atjaunināt pēc iespējas ātrāk vai pagaidīt dažas nedēļas? Noskaidrosim.

Lasīt Tālāk
Saistītās tēmas
  • Programmēšana
  • Python
  • SQL
  • Kodēšanas apmācības
Par autoru Džo Koburns(Publicēti 136 raksti)

Džo ir absolvējis datorzinātnes Linkolnas universitātē, Lielbritānijā. Viņš ir profesionāls programmatūras izstrādātājs, un, kad viņš nelido ar droniem un neraksta mūziku, viņu bieži var atrast, fotografējot vai veidojot video.

Windows 10 maina sākuma izvēlnes ikonas
Vairāk no Joe Coburn

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai iegūtu tehniskus padomus, pārskatus, bezmaksas e -grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu