Све што треба да знате о Питхон-у и објектно-релационим мапама

Све што треба да знате о Питхон-у и објектно-релационим мапама

Можда сте чули за објектно-релационо мапирање (ОРМ). Можда сте чак користили један, али шта су они заправо? И како их користите у Питхону?





Ево свега што требате знати о ОРМ -овима и Питхону.





Шта је ОРМ?

Објектно-релационо мапирање (ОРМ) је техника програмирања која се користи за приступ бази података. Излаже вашу базу података у низ објеката. Не морате писати СКЛ команде за уметање или преузимање података, користите низ атрибута и метода везаних за објекте.





Можда звучи сложено и непотребно, али вам могу уштедети много времена и помоћи у контроли приступа вашој бази података.

Ево примера. Реците да кад год уметнете лозинку у базу података желите да је распршите, као што је објашњено у безбедности лозинки на веб локацији. Ово није проблем за једноставне случајеве употребе-прорачун радите пре уметања. Али шта ако морате да уметнете запис на много места у код? Шта ако други програмер убаци у вашу табелу, а ви не знате за то?



Коришћењем ОРМ -а можете написати код да бисте осигурали да се сваки пут и где год приступи било ком реду или пољу у вашој бази података прво изврши ваш други, прилагођени код.

Ово такође делује као „јединствени извор истине“. Ако желите да промените прилагођени прорачун, морате га променити само на једном месту, а не на неколико. Могуће је применити многе од ових принципа објектно оријентисано програмирање (ООП) у Питхону , али ОРМ -и раде заједно са ООП принципима за контролу приступа бази података.





Приликом коришћења ОРМ -а морате пазити на одређене ствари, а постоје околности у којима можда не желите да га користите, али се генерално сматра да је то добро имати, посебно у великој бази кодова.

ОРМ -ови у Питхону користећи СКЛАлцхеми

Као и многи задаци у Питхону, увоз и унос модула је бржи и лакши од писања сопственог. Наравно, могуће је написати сопствени ОРМ, али зашто поново измишљати точак?





Сви следећи примери користе СКЛАлцхеми , популаран Питхон ОРМ, али многи принципи се примењују без обзира на примену.

Подешавање Питхона за СКЛАлцхеми

Пре него што уђете, мораћете да подесите машину за развој Питхон -а помоћу СКЛАлцхеми -а.

Да бисте пратили ове примере, мораћете да користите Питхон 3.6. Док ће старије верзије радити, доњи код ће морати да се измени пре него што се покрене. Нисте сигурни у разлике? Наша Питања о Питхону покривају све разлике.

Пре кодирања, требало би да подесите Питхон окружење које ће спречити проблеме са другим увезеним Питхон пакетима.

Уверите се да имате ПИП, менаџер пакета Питхон инсталиран, који долази са најсавременијим верзијама Питхона.

Када будете спремни за почетак, можете почети са припремом СКЛАлцхеми -а. Из свог Питхон окружења у командној линији инсталирајте СКЛАлцхеми са пип инсталл команда:

pip install SQLAlchemy-1.2.9

Тхе 1.2.9 је број верзије. Ово можете оставити искључено да бисте добили најновији пакет, али добра је пракса да будете конкретни. Не знате када би ново издање могло да поквари ваш тренутни код.

Сада сте спремни за почетак кодирања. Можда ћете морати да припремите базу података да прихвати Питхон везу, али сви следећи примери користе СКЛите база података креирана у меморији испод.

Модели у СКЛАлцхеми

Једна од кључних компоненти ОРМ -а је а модел . Ово је Питхон класа која описује како табела треба да изгледа и како треба да функционише. То је ОРМ верзија ЦРЕАТЕ ТАБЛЕ израз у СКЛ -у. За сваку табелу у бази података потребан вам је модел.

Отворите свој омиљени уређивач текста или ИДЕ и креирајте нову датотеку под називом тест.пи . Унесите овај почетни код, сачувајте датотеку и покрените је:

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

Овај код ради неколико ствари. Увоз је неопходан како би Питхон разумео где да пронађе СКЛАлцхеми модуле који су му потребни. Ваши модели ће користити декларативна_база касније, и конфигурише све нове моделе да раде како се очекује.

Тхе цреате_енгине метода ствара нову везу са вашом базом података. Ако већ имате базу података, мораћете да је промените склите: // на УРИ базе података. Овакав код ће створити нову базу података само у меморији. База података се уништава када се ваш код заврши са извршавањем.

Коначно, цреате_алл метход ствара све табеле дефинисане у вашим режимима у вашој бази података. Пошто још нисте дефинисали ниједан модел, ништа се неће догодити. Покрените овај код како бисте били сигурни да немате проблема или грешака у куцању.

Хајде да направимо модел. Додајте још један увоз на врх датотеке:

from sqlalchemy import Column, Integer, String

Ово увози Колона , Интегер , и Низ модули из СКЛАлцхеми. Они дефинишу како функционишу табеле базе података, поља, колоне и типови података.

Испод декларативна_база , креирајте своју класу модела:

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

Овај једноставан пример користи аутомобиле, али ваше табеле могу садржати било које податке.

Свака класа мора да наследи База . Име ваше табеле базе података је дефинисано у __име табеле__ . Ово би требало бити исто као назив класе, али ово је само препорука и ништа се неће сломити ако се не подударају.

Коначно, свака колона је дефинисана као питхон променљива унутар класе. Користе се различити типови података, а Примарни кључ атрибут говори СКЛАлцхеми -у да створи ид колона као примарни кључ.

Само напред и додајте последњи увоз, овај пут за Страни кључ модул. Додајте ово поред вашег Колона увоз:

from sqlalchemy import Column, ForeignKey, Integer, String

Сада креирајте другу класу модела. Ова класа се зове Власници аутомобила , и складишти податке о власницима одређених аутомобила ускладиштених у Аутомобили сто:

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)

Овде је уведено неколико нових атрибута. Тхе цар_ид поље је дефинисано као страни кључ. Повезан је са ид у аутомобили сто. Обратите пажњу на то како се користи име мале табеле, унесено у назив велике класе.

Коначно, атрибут ауто је дефинисан као а однос . Ово омогућава вашем моделу приступ Аутомобили табеле кроз ову променљиву. Ово је приказано у наставку.

Ако сада покренете овај код, видећете да се ништа неће догодити. То је зато што му још нисте рекли да учини било шта приметно.

Објекти у СКЛАлцхеми

Сада када су ваши модели креирани, можете приступити објектима и читати и писати податке. Добра је идеја да своју логику поставите у сопствену класу и датотеку, али за сада може остати поред модела.

Писање података

У овом примеру морате унети неке податке у базу података пре него што их прочитате. Ако користите постојећу базу података, можда већ имате податке. У сваком случају, и даље је врло корисно знати како уметнути податке.

Можда сте навикли да пишете ИНСЕРТ изрази у СКЛ -у. СКЛАлцхеми ово решава уместо вас. Ево како да уметнете један ред у Аутомобили модел. Почните са новим увозом за сессионмакер :

from sqlalchemy.orm import sessionmaker

Ово је потребно за стварање седница и ДБСессион објекти који се користе за читање и писање података:

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

Сада стави ово испод своје цреате_алл изјава:

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

Хајде да разбијемо тај код. Променљива цар1 је дефинисан као објекат заснован на Аутомобили модел. Његова марка и боја су постављени као параметри. Ово је као да кажете „направите ми ауто, али немојте то још да записујете у базу података“. Овај аутомобил постоји у меморији, али чека на писање.

Додајте аутомобил сесији помоћу сессион.адд , а затим га упишите у базу података са сессион.цоммит .

Сада додајмо власника:

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

Овај код је готово идентичан претходном уметку за Аутомобили модел. Главна разлика овде је у томе цар_ид је страни кључ па му је потребан ИД реда који постоји у другој табели. Овоме се приступа путем цар1.ид својство.

Не морате да постављате упите у базу података нити да враћате било које ИД -ове, јер СКЛАлцхеми то решава уместо вас (све док прво урежете податке).

Читање података

Након што сте написали неке податке, можете почети да их читате назад. Ево како да поставите упит за Аутомобили и Власници аутомобила табеле:

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

То је тако једноставно. Коришћењем упит метода која се налази у седница , одређујете модел, а затим користите све метод за преузимање свих резултата. Ако знате да ће бити само један резултат, можете користити први метода:

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

Када упитате модел и сачувате добијене резултате у променљивој, можете приступити подацима преко објекта:

print(result[0].color)

Ово штампа боју „сребрна“, јер је тај запис први ред. Можете прећи преко објекта резултата ако желите.

Како сте дефинисали однос у свом моделу, могуће је приступити подацима у повезаним табелама без навођења придруживања:

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

Ово функционише јер ваш модел садржи детаље о структури ваше табеле и ауто атрибут је дефинисан као веза до аутомобили сто.

Шта се не свиђа ОРМ -овима?

Овај водич је обухватио само основе, али када их савладате, можете прећи на напредне теме. Постоје неки потенцијални недостаци ОРМ -а:

  • Морате да напишете свој модел пре него што се покрену било какви упити.
  • То је још једна нова синтакса за учење.
  • Можда је превише сложено за једноставне потребе.
  • Морате имати добар дизајн базе података за почетак.

Ова питања сама по себи нису велики проблем, али на њих треба пазити. Ако радите са постојећом базом података, можда ћете бити ухваћени.

Ако нисте уверени да је ОРМ прави алат за вас, свакако прочитајте о важне СКЛ команде које програмери треба да знају .

Објави Објави Твеет Емаил Требате ли одмах надоградити на Виндовс 11?

Виндовс 11 ускоро долази, али да ли треба да ажурирате што је пре могуће или да сачекате неколико недеља? Хајде да сазнамо.

Прочитајте следеће
Повезане теме
  • Програмирање
  • Питхон
  • СКЛ
  • Кодирање Туториали
О аутору Јое Цобурн(136 објављених чланака)

Јое је дипломирао рачунарство на Универзитету Линцолн, УК. Он је професионални програмер софтвера и када не лети беспилотним летелицама или не пише музику, често га се може затећи како фотографише или производи видео записе.

који ме је блокирао на Фејсбуку
Више од Јоеа Цобурна

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, критике, бесплатне е -књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили