Minden, amit a Pythonról és az objektum-relációs térképekről tudni kell

Minden, amit a Pythonról és az objektum-relációs térképekről tudni kell

Talán hallott már az objektum-relációs leképezésről (ORM). Lehet, hogy már használt is egyet, de pontosan mik ezek? És hogyan használod őket a Pythonban?





Itt mindent megtudhat az ORM -ekről és a Pythonról.





Mi az ORM?

Az objektum-relációs leképezés (ORM) az adatbázis eléréséhez használt programozási technika. Az adatbázisot objektumok sorozatává teszi. Az adatok beszúrásához vagy visszakereséséhez nem kell SQL parancsokat írnia, az objektumokhoz csatolt attribútumok és módszerek sorozatát használja.





Összetettnek és szükségtelennek tűnhet, de sok időt takaríthat meg, és segíthet az adatbázishoz való hozzáférés szabályozásában.

Íme egy példa. Mondja, hogy amikor beilleszt egy jelszót az adatbázisba, kivonatolni kívánja, amint azt a webhely jelszavas biztonsága ismerteti. Ez nem jelent problémát egyszerű használat esetén-a számítást a behelyezés előtt kell elvégezni. De mi van, ha be kell illesztenie egy rekordot a kód sok helyére? Mi van, ha egy másik programozó beszúr az asztalába, és Ön nem tud róla?



Az ORM használatával kódot írhat annak biztosítására, hogy bármikor és bárhol elérje az adatbázis bármely sorát vagy mezőjét, először a másik, egyedi kód kerül végrehajtásra.

Ez egyben „egyetlen igazságforrás” is. Ha módosítani szeretne egy egyéni számítást, csak egy helyen kell módosítania, nem több helyen. Ezen elvek közül sok megvalósítható objektumorientált programozás (OOP) a Pythonban , de az ORM -ek az OOP elvekkel párhuzamosan működnek az adatbázishoz való hozzáférés vezérlésében.





Vannak bizonyos dolgok, amelyekre figyelni kell az ORM használatakor, és vannak olyan körülmények, amikor esetleg nem szeretné használni, de általában jónak tartják, különösen egy nagy kódbázisban.

ORM -ek a Pythonban az SQLAlchemy használatával

A Python számos feladatához hasonlóan gyorsabb és egyszerűbb a modul importálása, mint a saját írása. Természetesen lehet saját ORM -et írni, de miért kell feltalálni a kereket?





Az alábbi példák mindegyikét használják SQLAlchemy , népszerű Python ORM, de sok elv érvényes a megvalósítástól függetlenül.

A Python beállítása az SQLAlchemy számára

Mielőtt belevágna, be kell állítania a gépet a Python fejlesztéséhez az SQLAlchemy segítségével.

A példák követéséhez a Python 3.6 -ot kell használnia. Bár a régebbi verziók működni fognak, az alábbi kód némi módosítást igényel a futtatás előtt. Nem biztos a különbségekben? A Python GYIK lefedi az összes különbséget.

A kódolás előtt be kell állítania egy Python környezetet, amely megakadályozza a más importált Python csomagokkal kapcsolatos problémákat.

Győződjön meg róla PIP, a Python csomagkezelő telepítve, amely a Python legmodernebb verzióival érkezik.

Ha készen áll az indulásra, kezdheti az SQLAlchemy előkészítésével. A Python környezetből a parancssorban telepítse az SQLAlchemy programot a pip telepítés parancs:

pip install SQLAlchemy-1.2.9

Az 1.2.9 a verziószám. Hagyja ezt ki, hogy megkapja a legújabb csomagot, de jó gyakorlat, ha pontos. Nem tudja, hogy egy új kiadás mikor törheti meg a jelenlegi kódot.

Most már készen áll a kódolás megkezdésére. Előfordulhat, hogy elő kell készítenie az adatbázist a Python -kapcsolat elfogadásához, de a következő példák mindegyike az SQLite lentebb létrehozott adatbázis a memóriában.

Modellek az SQLAlchemy -ban

Az ORM egyik legfontosabb összetevője a modell . Ez egy Python osztály, amely felvázolja, hogyan kell kinéznie egy táblázatnak, és hogyan kell működnie. Ez az ORM verziója TÁBLÁZAT LÉTREHOZÁSA nyilatkozat SQL -ben. Szüksége van egy modellre az adatbázis minden táblájához.

Nyissa meg kedvenc szövegszerkesztőjét vagy IDE -jét, és hozzon létre egy új fájlt teszt.py . Írja be ezt a kezdőkódot, mentse a fájlt és futtassa:

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

Ez a kód több dolgot tesz. Az importra azért van szükség, hogy a Python megértse, hol találja meg a szükséges SQLAlchemy modulokat. Modelljei a deklaratív_alap később, és az új modelleket a várt módon működteti.

Az create_engine metódus új kapcsolatot hoz létre az adatbázissal. Ha már rendelkezik adatbázissal, módosítania kell sqlite: // az adatbázis URI -jába. Ez a kód új adatbázist hoz létre csak a memóriában. Az adatbázis megsemmisül, amint a kód végrehajtása befejeződött.

Végül a create_all metódus létrehozza az összes módot az Ön adatbázisában. Mivel még nem definiált semmilyen modellt, semmi sem fog történni. Folytassa és futtassa ezt a kódot, hogy ne legyen problémája vagy elírása.

Készítsünk modellt. Újabb importálás hozzáadása a fájl tetejéhez:

from sqlalchemy import Column, Integer, String

Ez importálja a Oszlop , Egész szám , és Húr modulok az SQLAlchemy -től. Ezek határozzák meg az adatbázis -táblák, mezők, oszlopok és adattípusok működését.

Alatta deklaratív_alap , hozza létre a modellosztályát:

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

Ez az egyszerű példa autókat használ, de a táblázatok bármilyen adatot tartalmazhatnak.

Minden osztálynak örökölnie kell Bázis . Az adatbázis tábla neve itt van definiálva __tablename__ . Ennek meg kell egyeznie az osztály nevével, de ez csak egy ajánlás, és ha nem egyeznek, semmi sem törik össze.

Végül minden oszlop python változóként van definiálva az osztályon belül. Különböző adattípusokat használnak, és a elsődleges kulcs attribútum azt mondja az SQLAlchemy -nek, hogy hozza létre a id oszlopot elsődleges kulcsként.

Folytassa, és adjon hozzá egy utolsó importálást, ezúttal a Idegen kulcs modul. Ezt add hozzá a sajátodhoz Oszlop import:

from sqlalchemy import Column, ForeignKey, Integer, String

Most hozzon létre egy második modellosztályt. Ezt az osztályt ún Autótulajdonosok , és tárolja a tulajdonosok adatait a gépkocsiban tárolt konkrét autókról Autók asztal:

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)

Itt számos új attribútumot vezettek be. Az car_id mező idegen kulcsként van definiálva. Kapcsolódik a id ban,-ben autók asztal. Figyelje meg, hogyan használják a kisbetűs tábla nevét, a nagybetűs osztálynevet.

Végül egy attribútuma autó a kapcsolat . Ez lehetővé teszi, hogy a modell hozzáférjen a Autók táblázat ezen a változón keresztül. Ezt az alábbiakban mutatjuk be.

Ha most futtatja ezt a kódot, látni fogja, hogy semmi sem történik. Ennek az az oka, hogy még nem mondtad neki, hogy tegyen valami észrevehetőt.

Objektumok az SQLAlchemy -ban

Most, hogy a modellek elkészültek, elkezdheti elérni az objektumokat, valamint olvasni és írni adatokat. Jó ötlet a logikát a saját osztályába és fájljába helyezni, de egyelőre a modellek mellett maradhat.

Adatok írása

Ebben a példában néhány adatot be kell illesztenie az adatbázisba az olvasás előtt. Ha már létező adatbázist használ, előfordulhat, hogy már rendelkezik adatokkal. Akárhogy is, még mindig nagyon hasznos tudni, hogyan kell adatokat beszúrni.

Lehet, hogy megszokta az írást INSERT utasításokat SQL -ben. Ezt az SQLAlchemy oldja meg helyetted. Íme, hogyan illeszthet be egy sort a sorba Autók modell. Kezdje a (z) új importálásával ülésszervező :

from sqlalchemy.orm import sessionmaker

Ez szükséges a létrehozásához ülés és DBSession objektumok, amelyeket adatok olvasására és írására használnak:

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

Ezt most tegye a sajátja alá create_all nyilatkozat:

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

Bontsuk szét ezt a kódot. A változó autó1 alapján objektumként van definiálva Autók modell. Gyártmánya és színe paraméterként van beállítva. Ez olyan, mintha azt mondanánk: „készíts nekem autót, de még ne írd be az adatbázisba”. Ez az autó létezik a memóriában, de írásra vár.

Adja hozzá az autót a munkamenethez a gombbal session.add , majd írja be az adatbázisba a gombbal ülés.kötelezettség .

Most adjunk hozzá egy tulajdonost:

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

Ez a kód majdnem megegyezik a Autók modell. A fő különbség itt az car_id egy idegen kulcs, ezért szüksége van egy sor azonosítóra, amely létezik a másik táblában. Ehhez a autó1.id ingatlan.

Nem kell lekérdeznie az adatbázist, és nem kell visszaadnia az azonosítókat, mivel az SQLAlchemy kezeli ezt Ön helyett (mindaddig, amíg először véglegesíti az adatokat).

Adatok olvasása

Miután megírt néhány adatot, elkezdheti visszaolvasni. Íme, hogyan kell lekérdezni a Autók és Autótulajdonosok táblázatok:

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

Ez ilyen egyszerű. A lekérdezés módszert talál a ülés , adja meg a modellt, majd használja a összes módszer az összes eredmény lekérésére. Ha tudja, hogy csak egy eredmény lesz, akkor használhatja a első módszer:

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

Miután lekérdezte a modellt, és tárolta a visszaadott eredményeket egy változóban, hozzáférhet az adatokhoz az objektumon keresztül:

print(result[0].color)

Ezzel kinyomtatja az „ezüst” színt, mivel ez a rekord az első sor. Ha akarja, áthidalhatja az eredményobjektumot.

Amint meghatározta a kapcsolatot a modelljében, lehetséges a kapcsolódó táblázatok adataihoz való hozzáférés anélkül, hogy megadná az összekapcsolást:

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

Ez azért működik, mert a modell tartalmazza a táblázat szerkezetének részleteit, és a autó attribútumot linkként határozták meg autók asztal.

Mi nem tetszik az ORM -ekben?

Ez az oktatóanyag csak az alapokat fedte le, de ha már rájött ezekre, folytathatja a haladó témákat. Az ORM -eknek lehetséges hátrányai vannak:

  • A lekérdezések futtatásához meg kell írnia a modellt.
  • Ez egy újabb új szintaxis, amit meg kell tanulni.
  • Lehet, hogy túl bonyolult az egyszerű igényekhez.
  • Kezdetben jó adatbázis -tervezéssel kell rendelkeznie.

Ezek a problémák önmagukban nem jelentenek nagy problémát, de érdemes odafigyelni rájuk. Ha egy meglévő adatbázissal dolgozik, előfordulhat, hogy elkapja.

Ha nem vagy meggyőződve arról, hogy az ORM a megfelelő eszköz az Ön számára, akkor feltétlenül olvassa el a fontos SQL parancsokat kell tudniuk a programozóknak .

Részvény Részvény Csipog Email Azonnal frissítenie kell a Windows 11 rendszerre?

A Windows 11 hamarosan érkezik, de frissítse a lehető leghamarabb, vagy várjon néhány hetet? Találjuk ki.

Olvassa tovább
Kapcsolódó témák
  • Programozás
  • Piton
  • SQL
  • Kódolási oktatóanyagok
A szerzőről Joe Coburn(136 megjelent cikk)

Joe az Egyesült Királyságban, a Lincoln Egyetemen végzett informatikából. Professzionális szoftverfejlesztő, és amikor nem repül drónokkal és nem ír zenét, gyakran előfordul, hogy fényképeket készít vagy videókat készít.

legjobb alkalmazások ingyenes filmek megtekintéséhez
Joe Coburn további alkotásai

Iratkozzon fel hírlevelünkre

Csatlakozz hírlevelünkhöz, ahol technikai tippeket, véleményeket, ingyenes e -könyveket és exkluzív ajánlatokat találsz!

Feliratkozáshoz kattintson ide