Všetko, čo potrebujete vedieť o mapách Python a objektovo-relačných mapách

Všetko, čo potrebujete vedieť o mapách Python a objektovo-relačných mapách

Možno ste už počuli o objektovo-relačnom mapovaní (ORM). Možno ste dokonca nejaký použili, ale čo to vlastne je? A ako ich používate v Pythone?





Tu je všetko, čo potrebujete vedieť o ORM a Pythone.





Čo je to ORM?

Objektovo-relačné mapovanie (ORM) je programová technika používaná na prístup k databáze. Vašu databázu vystaví sérii objektov. Na vkladanie alebo získavanie údajov nemusíte písať príkazy SQL, používate sériu atribútov a metód spojených s objektmi.





Môže to znieť zložito a nepotrebne, ale môžu vám ušetriť veľa času a pomôcť ovládať prístup k vašej databáze.

Tu je príklad. Povedzte, že kedykoľvek vložíte heslo do databázy, chcete ho hashovať, ako je to vysvetlené v zabezpečení heslom webových stránok. V jednoduchých prípadoch použitia to nie je problém-výpočet vykonáte pred vložením. Ale čo keď potrebujete vložiť záznam na veľa miest v kóde? Čo keď do vašej tabuľky vloží iný programátor a vy o tom neviete?



Pomocou ORM môžete napísať kód, aby ste zaistili, že kedykoľvek a kdekoľvek sa pristúpi k akémukoľvek riadku alebo poli vo vašej databáze, najskôr sa spustí váš iný, vlastný kód.

Toto tiež funguje ako „jediný zdroj pravdy“. Ak chcete zmeniť vlastný výpočet, musíte ho zmeniť iba na jednom mieste, nie na niekoľkých. Mnoho z týchto princípov je možné vykonávať pomocou objektovo orientované programovanie (OOP) v Pythone , ale ORM pracujú spoločne s princípmi OOP na riadení prístupu k databáze.





Pri používaní ORM je potrebné si dávať pozor na určité veci a existujú situácie, kedy ju možno nebudete chcieť použiť, ale vo všeobecnosti sa považujú za dobré, najmä vo veľkej kódovej základni.

ORM v Pythone pomocou SQLAlchemy

Rovnako ako mnoho iných úloh v Pythone je importovanie modulu rýchlejšie a jednoduchšie ako písanie vlastného. Samozrejme, je možné napísať vlastnú ORM, ale prečo znova objavovať koleso?





Nasledujúce príklady všetky používajú SQLAlchýmia , populárny Python ORM, ale mnohé z princípov platia bez ohľadu na implementáciu.

Nastavenie Pythonu pre SQLAlchemy

Predtým, ako sa pustíte do toho, budete musieť nastaviť svoj počítač na vývoj v Pythone pomocou SQLAlchemy.

Nasledujte tieto príklady a budete musieť použiť Python 3.6. Aj keď budú staršie verzie fungovať, nižšie uvedený kód bude pred spustením potrebovať určité úpravy. Nie ste si istí rozdielmi? Naše časté otázky k Pythonu pokrývajú všetky rozdiely.

Pred kódovaním by ste mali nastaviť prostredie Python, ktoré zabráni problémom s inými importovanými balíkmi Pythonu.

Uistite sa, že máte PIP, správca balíkov Python nainštalovaný, ktorý je dodávaný s väčšinou moderných verzií Pythonu.

Akonáhle budete pripravení ísť, môžete začať tým, že sa pripravíte na SQLAlchemy. Z vášho prostredia Python na príkazovom riadku nainštalujte SQLAlchemy s príponou pip install príkaz:

pip install SQLAlchemy-1.2.9

The 1.2.9 je číslo verzie. Toto môžete nechať, aby ste získali najnovší balík, ale je dobré byť konkrétny. Neviete, kedy môže nové vydanie narušiť váš súčasný kód.

Teraz ste pripravení začať s kódovaním. Možno budete musieť pripraviť databázu na prijatie pripojenia Python, ale všetky nasledujúce príklady používajú príponu SQLite databáza vytvorená v pamäti nižšie.

Modely v SQLAlchemy

Jednou z kľúčových zložiek ORM je a Model . Toto je trieda Python, ktorá popisuje, ako by mala tabuľka vyzerať a ako by mala fungovať. Je to verzia ORM súboru VYTVORIŤ TABUĽKU príkaz v SQL. Pre každú tabuľku vo svojej databáze potrebujete model.

Otvorte svoj obľúbený textový editor alebo IDE a vytvorte nový súbor s názvom test.py . Zadajte tento štartovací kód, uložte súbor a spustite ho:

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

Tento kód robí niekoľko vecí. Import je potrebný na to, aby Python pochopil, kde nájsť potrebné moduly SQLAlchemy. Vaše modely budú používať príponu deklaratívna základňa neskôr a nakonfiguruje všetky nové modely tak, aby fungovali podľa očakávania.

The create_engine metóda vytvorí nové pripojenie k vašej databáze. Ak už databázu máte, budete ju musieť zmeniť sqlite: // do vášho URI databázy. Ako to je, tento kód vytvorí novú databázu iba v pamäti. Po dokončení vykonávania kódu sa databáza zničí.

Nakoniec, create_all metóda vytvorí vo vašej databáze všetky tabuľky definované vo vašich režimoch. Keďže ste zatiaľ nedefinovali žiadne modely, nič sa nestane. Pokračujte a spustite tento kód, aby ste sa uistili, že nebudete mať žiadne problémy alebo preklepy.

Urobme si model. Pridajte ďalší import do hornej časti súboru:

from sqlalchemy import Column, Integer, String

Toto dováža Stĺpec , Celé číslo a Reťazec moduly od SQLAlchemy. Definujú, ako fungujú databázové tabuľky, polia, stĺpce a dátové typy.

Pod deklaratívna základňa , vytvorte si svoju modelovú triedu:

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

Tento jednoduchý príklad používa autá, ale vaše tabuľky môžu obsahovať akékoľvek údaje.

Každá trieda musí dediť Základňa . Názov vašej databázovej tabuľky je definovaný v __tablename__ . Malo by to byť rovnaké ako názov triedy, ale je to len odporúčanie a nič sa nezlomí, ak sa nezhodujú.

Nakoniec je každý stĺpec definovaný ako premenná pythonu v rámci triedy. Používajú sa rôzne typy údajov a primárny kľúč atribút hovorí SQLAlchemy, aby vytvoril súbor id stĺpec ako primárny kľúč.

Pokračujte a pridajte posledný import, tentokrát pre súbor Cudzí kľúč modul. Pridajte to vedľa svojho Stĺpec import:

from sqlalchemy import Column, ForeignKey, Integer, String

Teraz vytvorte druhú modelovú triedu. Táto trieda sa nazýva Majitelia automobilov , a podrobnosti o majiteľovi obchodu o konkrétnych automobiloch uložených v obchode Autá stôl:

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)

Tu je uvedených niekoľko nových atribútov. The auto_id pole je definované ako cudzí kľúč. Je prepojený s id v autá stôl. Všimnite si, ako sa používa názov tabuľky malých písmen, namiesto názvu veľkej triedy.

Nakoniec atribút auto je definovaný ako a vzťah . Váš model tak bude mať prístup k Autá tabuľku prostredníctvom tejto premennej. To je ukázané nižšie.

Ak tento kód spustíte teraz, uvidíte, že sa nič nestane. Dôvodom je, že ste mu ešte nepovedali, aby robil niečo viditeľné.

Objekty v SQLAlchemy

Teraz, keď sú vaše modely vytvorené, môžete začať pristupovať k objektom a čítať a zapisovať údaje. Je dobré umiestniť svoju logiku do vlastnej triedy a súboru, ale zatiaľ môže zostať vedľa modelov.

Zápis dát

V tomto prípade musíte najskôr načítať niektoré údaje do databázy. Ak používate existujúcu databázu, možno už máte údaje. Tak či onak, je stále veľmi užitočné vedieť, ako vkladať údaje.

Možno ste zvyknutí písať VLOŽIŤ príkazy v SQL. SQLAlchemy to rieši za vás. Tu je návod, ako vložiť jeden riadok do súboru Autá Model. Začnite novým importom pre tvorca relácie :

from sqlalchemy.orm import sessionmaker

To je potrebné na vytvorenie súboru sedenie a DBSession objekty, ktoré sa používajú na čítanie a zápis údajov:

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

Teraz to dajte pod svoje create_all vyhlásenie:

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

Poďme rozobrať ten kód. Premenná auto1 je definovaný ako objekt na základe Autá Model. Jeho značka a farba sú nastavené ako parametre. Je to ako hovoriť „urob mi auto, ale zatiaľ ho nezapisuj do databázy“. Toto auto existuje v pamäti, ale čaká na zápis.

Pridajte auto do relácie pomocou session.add , a potom ho zapíšte do databázy pomocou session.commit .

Teraz pridáme vlastníka:

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

Tento kód je takmer identický s predchádzajúcou prílohou pre Autá Model. Hlavný rozdiel tu je v tom auto_id je cudzí kľúč, takže potrebuje ID riadka, ktoré existuje v druhej tabuľke. Prístup je k dispozícii prostredníctvom auto1.id nehnuteľnosť.

Nemusíte zadávať dotazy do databázy ani vracať žiadne ID, pretože SQLAlchemy to vyrieši za vás (pokiaľ najskôr zadáte údaje).

Čítanie údajov

Keď napíšete nejaké údaje, môžete ich začať čítať späť. Tu je postup, ako zadať dotaz do súboru Autá a Majitelia automobilov stoly:

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

Je to také jednoduché. Použitím dopyt metóda nachádzajúca sa v sedenie , zadáte model a potom použijete všetky metóda na získanie všetkých výsledkov. Ak viete, že bude len jeden výsledok, môžete použiť najprv metóda:

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

Po zadaní dotazu na model a uložení vrátených výsledkov do premennej máte prístup k údajom prostredníctvom objektu:

print(result[0].color)

Vytlačí sa farba „strieborná“, pretože tento záznam je prvým riadkom. Ak chcete, môžete sa dostať nad výsledný objekt.

Keď ste vo svojom modeli definovali vzťah, je možné pristupovať k údajom v súvisiacich tabuľkách bez zadania spojenia:

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

Funguje to, pretože váš model obsahuje podrobnosti o štruktúre tabuľky a auto atribút bol definovaný ako odkaz na súbor autá stôl.

Čo sa vám na ORM nepáči?

Tento tutoriál sa zaoberal iba základmi, ale keď ich zvládnete, môžete prejsť na pokročilé témy. ORM má niekoľko potenciálnych nevýhod:

  • Pred spustením akýchkoľvek dotazov musíte napísať svoj model.
  • Je to ďalšia nová syntax, ktorú sa musíte naučiť.
  • Na jednoduché potreby môže byť príliš zložitý.
  • Na začiatok musíte mať dobrý návrh databázy.

Tieto problémy samy osebe nie sú veľkým problémom, ale je potrebné si na ne dávať pozor. Ak pracujete s existujúcou databázou, môže vás to chytiť.

Ak nie ste presvedčení, že ORM je pre vás ten pravý nástroj, prečítajte si o ňom programátori by mali vedieť dôležité príkazy SQL .

zdieľam zdieľam Tweet E -mail Mali by ste okamžite upgradovať na Windows 11?

Windows 11 bude čoskoro k dispozícii, ale mali by ste aktualizovať čo najskôr alebo počkať niekoľko týždňov? Poďme zistiť.

Čítajte ďalej
Súvisiace témy
  • Programovanie
  • Python
  • SQL
  • Návody na kódovanie
O autorovi Joe Coburn(136 publikovaných článkov)

Joe je absolventom počítačových vied na University of Lincoln, UK. Je profesionálnym softvérovým vývojárom, a keď nelieta s dronmi ani nepíše hudbu, často ho zastihne fotografovanie alebo vytváranie videí.

ako urobiť obrázky do jedného
Viac od Joe Coburn

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné elektronické knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber