Kaikki mitä sinun tarvitsee tietää Pythonista ja objektisuhteesta

Kaikki mitä sinun tarvitsee tietää Pythonista ja objektisuhteesta

Olet ehkä kuullut objektin suhteellisesta kartoittamisesta (ORM). Olet ehkä jopa käyttänyt yhtä, mutta mitä ne ovat? Ja miten käytät niitä Pythonissa?





Tässä on kaikki mitä sinun tarvitsee tietää ORM: istä ja Pythonista.





Mikä on ORM?

Objektisuhteellinen kartoitus (ORM) on ohjelmointitekniikka, jota käytetään tietokannan käyttämiseen. Se paljastaa tietokannasi sarjaksi objekteja. Sinun ei tarvitse kirjoittaa SQL -komentoja lisätäksesi tai noutaaksesi tietoja, vaan käytät joukkoa määritteitä ja menetelmiä, jotka on liitetty objekteihin.





Se voi kuulostaa monimutkaiselta ja tarpeettomalta, mutta se voi säästää paljon aikaa ja auttaa hallitsemaan tietokannan käyttöä.

Tässä on esimerkki. Sano, että aina kun lisäät salasanan tietokantaasi, haluat tiivistää sen, kuten on selostettu sivuston salasanasuojauksessa. Tämä ei ole ongelma yksinkertaisissa käyttötapauksissa-teet laskelmat ennen lisäämistä. Mutta entä jos sinun on lisättävä tietue koodin moniin paikkoihin? Entä jos toinen ohjelmoija lisää taulukkoosi etkä tiedä?



Käyttämällä ORM: ää voit kirjoittaa koodin varmistaaksesi, että milloin tahansa ja missä tahansa tietokannasi rivillä tai kentällä käytetään, toinen, mukautettu koodisi suoritetaan ensin.

Tämä toimii myös 'ainoana totuuden lähteenä'. Jos haluat muuttaa mukautettua laskutoimitusta, sinun on muutettava sitä vain yhdessä paikassa, ei useissa. On mahdollista toteuttaa monia näistä periaatteista olio -ohjelmointi (OOP) Pythonissa , mutta ORM: t toimivat yhdessä OOP -periaatteiden kanssa hallitakseen pääsyä tietokantaan.





ORM: ää käytettäessä on otettava huomioon tiettyjä asioita, ja on tilanteita, joissa et ehkä halua käyttää sitä, mutta niiden katsotaan yleensä olevan hyvä asia, etenkin suuressa koodikannassa.

ORM: t Pythonissa SQLAlchemy -sovelluksella

Kuten monet Pythonin tehtävät, moduulin tuonti on nopeampaa ja helpompaa kuin oman kirjoittaminen. Tietenkin on mahdollista kirjoittaa oma ORM, mutta miksi keksiä pyörä uudelleen?





Seuraavat esimerkit käyttävät kaikkia SQLAlchemy , suosittu Python ORM, mutta monet periaatteet pätevät toteutuksesta riippumatta.

Pythonin asentaminen SQLAlchemy -ohjelmaa varten

Ennen kuin hyppäät suoraan sisään, sinun on asetettava koneesi Python -kehitykseen SQLAlchemy -ohjelmalla.

Sinun on käytettävä Python 3.6: ta seurataksesi näitä esimerkkejä. Vaikka vanhemmat versiot toimivat, alla olevaa koodia on muutettava, ennen kuin se käynnistyy. Etkö ole varma eroista? Pythonin usein kysytyt kysymykset kattavat kaikki erot.

Ennen koodausta sinun on määritettävä Python -ympäristö, joka estää muiden tuotujen Python -pakettien ongelmat.

Varmista, että sinulla on PIP, Python -paketinhallinta asennettu, joka tulee uusimpien Python -versioiden mukana.

Kun olet valmis lähtemään, voit aloittaa valmistelemalla SQLAlchemy. Asenna SQLAlchemy komentorivillä Python -ympäristössäsi komentoriviltä pip asennus komento:

pip install SQLAlchemy-1.2.9

The 1.2.9 on versionumero. Voit jättää tämän pois päältä saadaksesi uusimman paketin, mutta on hyvä käytäntö täsmentää. Et tiedä milloin uusi julkaisu voi rikkoa nykyisen koodisi.

Nyt olet valmis aloittamaan koodauksen. Sinun on ehkä valmisteltava tietokanta hyväksymään Python -yhteys, mutta kaikki seuraavat esimerkit käyttävät SQLite alla oleva muistiin luotu tietokanta.

SQLAlchemy -mallit

Yksi ORM: n keskeisistä komponenteista on a malli- . Tämä on Python -luokka, jossa hahmotellaan miltä taulukon pitäisi näyttää ja miten sen pitäisi toimia. Se on ORM -versio LUO TAULUKKO lausunto SQL: ssä. Tarvitset mallin jokaiselle tietokannasi taulukolle.

Avaa suosikkitekstieditorisi tai IDE ja luo uusi tiedosto nimeltä test.py . Kirjoita tämä aloituskoodi, tallenna tiedosto ja suorita se:

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

Tämä koodi tekee useita asioita. Tuonti on välttämätöntä, jotta Python ymmärtää tarvitsemansa SQLAlchemy -moduulit. Mallisi käyttävät deklarative_base myöhemmin, ja se määrittää kaikki uudet mallit toimimaan odotetulla tavalla.

The create_engine menetelmä luo uuden yhteyden tietokantaasi. Jos sinulla on jo tietokanta, sinun on vaihdettava sqlite: // tietokannan URI -osoitteeseen. Tämä koodi luo uuden tietokannan vain muistiin. Tietokanta tuhoutuu, kun koodisi on suoritettu.

Lopuksi, create_all method luo kaikki tilaasi määritetyt taulukot tietokantaasi. Koska et ole vielä määrittänyt malleja, mitään ei tapahdu. Suorita tämä koodi varmistaaksesi, ettei sinulla ole ongelmia tai kirjoitusvirheitä.

Tehdään malli. Lisää toinen tuonti tiedoston yläosaan:

from sqlalchemy import Column, Integer, String

Tämä tuo Sarake , Kokonaisluku ja Jousisoitin SQLAlchemy -moduulit. Ne määrittävät, miten tietokantataulukot, kentät, sarakkeet ja tietotyypit toimivat.

Sen alla deklarative_base , luo malliluokka:

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

Tässä yksinkertaisessa esimerkissä käytetään autoja, mutta taulukoissasi voi olla mitä tahansa tietoa.

Jokaisen luokan on perittävä Pohja . Tietokantataulukon nimi on määritetty kohdassa __tablename__ . Tämän pitäisi olla sama kuin luokan nimi, mutta tämä on vain suositus, eikä mikään rikkoudu, jos ne eivät täsmää.

Lopuksi jokainen sarake määritellään python -muuttujaksi luokassa. Käytetään erilaisia ​​tietotyyppejä ja pääavain attribuutti käskee SQLAlchemya luomaan id sarake ensisijaisena avaimena.

Jatka ja lisää viimeinen tuonti, tällä kertaa ForeignKey moduuli. Lisää tämä rinnallesi Sarake tuonti:

from sqlalchemy import Column, ForeignKey, Integer, String

Luo nyt toinen malliluokka. Tätä luokkaa kutsutaan Autonomistajat ja tallentaa omistajan tiedot tietyistä autoista, jotka on tallennettu Autot pöytä:

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)

Täällä on otettu käyttöön useita uusia ominaisuuksia. The car_id kenttä määritellään vieraaksi avaimeksi. Se liittyy id kohdassa autoja pöytä. Huomaa, kuinka pienen kirjaimen taulukon nimeä käytetään isojen kirjainten luokan nimen kanssa.

Lopuksi ominaisuus auto on määritelty a suhde . Tämä mahdollistaa mallisi pääsyn Autot taulukko tämän muuttujan kautta. Tämä on esitetty alla.

Jos suoritat tämän koodin nyt, huomaat, ettei mitään tapahdu. Tämä johtuu siitä, ettet ole vielä sanonut sen tekevän mitään havaittavaa.

SQLAlchemy -objektit

Nyt kun mallisi on luotu, voit alkaa käyttää objekteja sekä lukea ja kirjoittaa tietoja. On hyvä idea sijoittaa logiikka omaan luokkaansa ja tiedostoonsa, mutta toistaiseksi se voi pysyä mallien rinnalla.

Tietojen kirjoittaminen

Tässä esimerkissä sinun on lisättävä joitakin tietoja tietokantaan, ennen kuin voit lukea niitä. Jos käytät olemassa olevaa tietokantaa, sinulla voi olla jo tietoja. Joka tapauksessa on edelleen erittäin hyödyllistä tietää, miten tietoja lisätään.

Saatat olla tottunut kirjoittamaan INSERT lausunnot SQL: ssä. SQLAlchemy hoitaa tämän puolestasi. Näin lisäät yhden rivin riviin Autot malli. Aloita uudella tuonnilla istunnonvalvoja :

from sqlalchemy.orm import sessionmaker

Tätä tarvitaan luomaan istunto ja DBS -istunto objektit, joita käytetään tietojen lukemiseen ja kirjoittamiseen:

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

Laita tämä nyt omasi alle create_all lausunto:

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

Hajotetaan se koodi. Muuttuja auto 1 määritellään objektiksi, joka perustuu Autot malli. Sen merkki ja väri asetetaan parametreiksi. Tämä on kuin sanoisi 'tee minulle auto, mutta älä kirjoita sitä vielä tietokantaan'. Tämä auto on muistissa, mutta odottaa kirjoittamista.

Lisää auto istuntoon painamalla session.add ja kirjoita se sitten tietokantaan istunto. sitoudu .

Lisätään nyt omistaja:

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

Tämä koodi on lähes identtinen edellisen lisäosan kanssa Autot malli. Suurin ero tässä on se car_id on vieras avain, joten se tarvitsee rivin tunnuksen, joka on toisessa taulukossa. Tähän pääsee auto1.id omaisuutta.

Sinun ei tarvitse tehdä kyselyä tietokannasta tai palauttaa tunnuksia, koska SQLAlchemy hoitaa tämän puolestasi (kunhan sitoudut ensin tietoihin).

Tietojen lukeminen

Kun olet kirjoittanut joitakin tietoja, voit alkaa lukea niitä takaisin. Näin voit tehdä kyselyn Autot ja Autonomistajat taulukot:

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

Se on niin yksinkertaista. Käyttämällä kysely menetelmä löytyy osoitteesta istunto , määrität mallin ja käytät sitten kaikki menetelmä kaikkien tulosten noutamiseksi. Jos tiedät, että tulos on vain yksi, voit käyttää ensimmäinen menetelmä:

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

Kun olet tiedustellut mallia ja tallentanut palautetut tulokset muuttujaan, voit käyttää tietoja objektin kautta:

print(result[0].color)

Tämä tulostaa värin 'hopea', koska kyseinen tietue on ensimmäinen rivi. Voit halutessasi kiertää tulosobjektin.

Määrittäessäsi suhdetta mallissasi voit käyttää tietoja liittyvissä taulukoissa määrittämättä liitosta:

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

Tämä toimii, koska mallisi sisältää taulukon rakenteen ja auto attribuutti määriteltiin linkiksi autoja pöytä.

Mikä ei pidä ORM: istä?

Tämä opetusohjelma kattoi vain perusasiat, mutta kun olet perehtynyt niihin, voit siirtyä edistyneisiin aiheisiin. ORM -järjestelmillä on joitain mahdollisia haittoja:

  • Sinun on kirjoitettava malli ennen kuin kyselyt voidaan suorittaa.
  • Se on toinen uusi syntaksi oppia.
  • Se voi olla liian monimutkainen yksinkertaisiin tarpeisiin.
  • Sinulla on oltava hyvä tietokannan suunnittelu aluksi.

Nämä ongelmat eivät sinänsä ole suuri ongelma, mutta niitä kannattaa varoa. Jos työskentelet olemassa olevan tietokannan kanssa, saatat jäädä kiinni.

Jos et ole vakuuttunut siitä, että ORM on oikea työkalu sinulle, muista lukea siitä tärkeät SQL -komennot, jotka ohjelmoijien tulisi tietää .

Jaa Jaa Tweet Sähköposti Pitäisikö sinun päivittää Windows 11: een välittömästi?

Windows 11 on tulossa pian, mutta pitäisikö sinun päivittää mahdollisimman pian tai odottaa muutama viikko? Otetaan selvää.

Lue seuraava
Liittyvät aiheet
  • Ohjelmointi
  • Python
  • SQL
  • Koodausoppaat
Kirjailijasta Joe Coburn(136 artikkelia julkaistu)

Joe on valmistunut tietojenkäsittelytieteestä Lincolnin yliopistosta Iso -Britanniasta. Hän on ammattimainen ohjelmistokehittäjä, ja kun hän ei lentä droneilla tai kirjoita musiikkia, hänet voidaan usein ottaa valokuvista tai videoista.

miten löydän kaikki sähköpostiosoitteeseeni liittyvät verkkosivustolit?
Lisää Joe Coburnilta

tilaa uutiskirjeemme

Liity uutiskirjeeseemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e -kirjoja ja ainutlaatuisia tarjouksia!

Klikkaa tästä tilataksesi