Python ve Nesne İlişkisel Haritalar Hakkında Bilmeniz Gereken Her Şey

Python ve Nesne İlişkisel Haritalar Hakkında Bilmeniz Gereken Her Şey

Nesne-ilişkisel eşlemeyi (ORM) duymuş olabilirsiniz. Birini bile kullanmış olabilirsiniz, ama bunlar tam olarak nedir? Ve bunları Python'da nasıl kullanıyorsunuz?





İşte ORM'ler ve Python hakkında bilmeniz gereken her şey.





ORM Nedir?

Nesne-ilişkisel eşleme (ORM), bir veritabanına erişmek için kullanılan bir programlama tekniğidir. Veritabanınızı bir dizi nesneye sunar. Veri eklemek veya almak için SQL komutları yazmanız gerekmez, nesnelere eklenmiş bir dizi öznitelik ve yöntem kullanırsınız.





Karmaşık ve gereksiz gelebilir, ancak size çok zaman kazandırabilir ve veritabanınıza erişimi kontrol etmenize yardımcı olabilirler.

İşte bir örnek. Web sitesi şifre güvenliği bölümünde açıklandığı gibi, veritabanınıza bir şifre eklediğinizde, onu karma hale getirmek istediğinizi söyleyin. Bu, basit kullanım durumları için bir sorun değildir --- hesaplamayı eklemeden önce yaparsınız. Peki ya kodun birçok yerine bir kayıt eklemeniz gerekirse? Ya tablonuza başka bir programcı girerse ve siz bilmiyorsanız?



Bir ORM kullanarak, veritabanınızdaki herhangi bir satıra veya alana ne zaman ve nerede erişilirse erişilsin, önce diğer özel kodunuzun yürütülmesini sağlamak için kod yazabilirsiniz.

Bu aynı zamanda 'tek bir hakikat kaynağı' işlevi görür. Özel bir hesaplamayı değiştirmek istiyorsanız, birkaç yerde değil, yalnızca bir yerde değiştirmeniz gerekir. Bu ilkelerin birçoğunu aşağıdakilerle gerçekleştirmek mümkündür: Python'da nesne yönelimli programlama (OOP) , ancak ORM'ler, bir veritabanına erişimi kontrol etmek için OOP ilkeleriyle birlikte çalışır.





Bir ORM kullanırken dikkat edilmesi gereken bazı şeyler vardır ve bir tane kullanmak istemeyebileceğiniz durumlar vardır, ancak bunlar genellikle sahip olunması gereken iyi bir şey olarak kabul edilir, özellikle büyük bir kod tabanında.

SQLAlchemy Kullanarak Python'da ORM'ler

Python'daki pek çok görev gibi, bir modülü içe aktarmak kendi modülünüzü yazmaktan daha hızlı ve kolaydır. Elbette kendi ORM'nizi yazmanız mümkün, ama neden tekerleği yeniden icat edesiniz?





Aşağıdaki örneklerin tümü SQLAlchemy , popüler bir Python ORM'sidir, ancak ilkelerin çoğu, uygulamadan bağımsız olarak geçerlidir.

SQLAlchemy için Python Kurulumu

Hemen konuya girmeden önce, SQLAlchemy ile Python geliştirme için makinenizi kurmanız gerekecek.

Bu örnekleri takip etmek için Python 3.6 kullanmanız gerekecek. Daha eski sürümler çalışacak olsa da, aşağıdaki kodun çalışmadan önce bazı değişikliklere ihtiyacı olacaktır. Farklılıklardan emin değil misiniz? Python SSS'miz tüm farklılıkları kapsar.

Kodlamadan önce, içe aktarılan diğer Python paketleriyle ilgili sorunları önleyecek bir Python ortamı kurmalısınız.

Sahip olduğundan emin ol PIP, Python paket yöneticisi Python'un en modern sürümleriyle birlikte gelen yüklü.

Gitmeye hazır olduğunuzda, SQLAlchemy'yi hazırlayarak başlayabilirsiniz. Komut satırında Python ortamınızın içinden, SQLAlchemy'yi şu komutla kurun: pip kurulumu emretmek:

pip install SQLAlchemy-1.2.9

NS 1.2.9 sürüm numarasıdır. En son paketi almak için bunu bırakabilirsiniz, ancak spesifik olmak iyi bir uygulamadır. Yeni bir sürümün mevcut kodunuzu ne zaman kırabileceğini bilemezsiniz.

Artık kodlamaya başlamaya hazırsınız. Veritabanınızı bir Python bağlantısını kabul edecek şekilde hazırlamanız gerekebilir, ancak aşağıdaki örneklerin tümü bir SQLit aşağıdaki bellekte oluşturulan veritabanı.

SQLAlchemy'deki modeller

Bir ORM'nin temel bileşenlerinden biri, bir model . Bu, bir tablonun nasıl görünmesi gerektiğini ve nasıl çalışması gerektiğini özetleyen bir Python sınıfıdır. ORM versiyonu TABLO OLUŞTUR SQL'de deyim. Veritabanınızdaki her tablo için bir modele ihtiyacınız var.

Favori metin düzenleyicinizi veya IDE'nizi açın ve adında yeni bir dosya oluşturun. test.py . Bu başlangıç ​​kodunu girin, dosyayı kaydedin ve çalıştırın:

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

Bu kod birkaç şey yapar. Python'un ihtiyaç duyduğu SQLAlchemy modüllerini nerede bulacağını anlaması için içe aktarma gereklidir. Modelleriniz bildirimsel_base daha sonra ve herhangi bir yeni modeli beklendiği gibi çalışacak şekilde yapılandırır.

NS create_engine method, veritabanınıza yeni bir bağlantı oluşturur. Zaten bir veritabanınız varsa, değiştirmeniz gerekir sqlite:// veritabanı URI'nize. Olduğu gibi, bu kod yalnızca bellekte yeni bir veritabanı oluşturacaktır. Kodunuzun yürütülmesi bittiğinde veritabanı yok edilir.

Son olarak, create_all method, kiplerinizde tanımlanan tüm tabloları veritabanınızda oluşturur. Henüz herhangi bir model tanımlamadığınız için hiçbir şey olmayacak. Devam edin ve herhangi bir sorun veya yazım hatası olmadığından emin olmak için bu kodu çalıştırın.

Bir model yapalım. Dosyanızın üstüne başka bir içe aktarma ekleyin:

from sqlalchemy import Column, Integer, String

Bu, şunları içe aktarır: Kolon , tamsayı , ve Sicim SQLAlchemy'den modüller. Veritabanı tablolarının, alanlarının, sütunlarının ve veri türlerinin nasıl çalıştığını tanımlarlar.

altında bildirimsel_base , model sınıfınızı oluşturun:

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

Bu basit örnek, arabaları kullanır, ancak tablolarınız herhangi bir veri içerebilir.

Her sınıf miras almalıdır Temel . Veritabanı tablo adınız şurada tanımlanmıştır: __Tablo ismi__ . Bu, sınıf adıyla aynı olmalıdır, ancak bu yalnızca bir öneridir ve eşleşmezlerse hiçbir şey bozulmaz.

Son olarak, her sütun sınıf içinde bir python değişkeni olarak tanımlanır. Farklı veri türleri kullanılır ve birincil anahtar öznitelik SQLAlchemy'ye şunu oluşturmasını söyler: İD sütunu birincil anahtar olarak kullanın.

Devam edin ve son bir içe aktarma ekleyin, bu sefer Yabancı anahtar modül. Bunu yanına ekle Kolon içe aktarmak:

from sqlalchemy import Column, ForeignKey, Integer, String

Şimdi ikinci bir model sınıfı oluşturun. Bu sınıf denir Araba sahipleri , ve depolanan belirli arabaların sahibi ayrıntılarını saklar Arabalar tablo:

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)

Burada tanıtılan birkaç yeni özellik var. NS car_id alan bir yabancı anahtar olarak tanımlanır. ile bağlantılıdır İD içinde arabalar tablo. Büyük harfli sınıf adının yerine küçük harfli tablo adının nasıl kullanıldığına dikkat edin.

Son olarak, bir öznitelik araba olarak tanımlanır ilişki . Bu, modelinizin Arabalar bu değişken aracılığıyla tablo. Bu aşağıda gösterilmiştir.

Bu kodu şimdi çalıştırırsanız, hiçbir şeyin olmadığını göreceksiniz. Bunun nedeni, ona henüz fark edilebilir bir şey yapmasını söylememiş olmanızdır.

SQLAlchemy'deki nesneler

Artık modelleriniz oluşturulduğuna göre, nesnelere erişmeye ve verileri okumaya ve yazmaya başlayabilirsiniz. Mantığınızı kendi sınıfına ve dosyasına yerleştirmek iyi bir fikirdir, ancak şimdilik modellerin yanında kalabilir.

Veri Yazma

Bu örnekte, okuyabilmeniz için önce veritabanına bazı veriler eklemeniz gerekir. Mevcut bir veritabanı kullanıyorsanız, zaten verileriniz olabilir. Her iki durumda da, verilerin nasıl ekleneceğini bilmek hala çok yararlıdır.

yazmaya alışmış olabilirsin SOKMAK SQL'deki ifadeler. SQLAlchemy bunu sizin için halleder. Bir satırı nasıl ekleyeceğiniz aşağıda açıklanmıştır. Arabalar modeli. için yeni bir içe aktarma ile başlayın oturumcu :

from sqlalchemy.orm import sessionmaker

oluşturmak için bu gereklidir oturum, toplantı, celse ve DBSession veri okumak ve yazmak için kullanılan nesneler:

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

Şimdi bunu altına koy create_all Beyan:

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

Hadi o kodu parçalayalım. Değişken araba1 dayalı bir nesne olarak tanımlanır. Arabalar modeli. Yapısı ve rengi parametre olarak ayarlanır. Bu, 'bana bir araba yap ama onu henüz veri tabanına yazma' demek gibidir. Bu araba hafızada var ama yazılmayı bekliyor.

ile oturuma araba ekleyin oturum.add ve ardından veritabanına şununla yazın: oturum.taahhüt .

Şimdi bir sahip ekleyelim:

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

Bu kod, bir önceki ek ile neredeyse aynıdır. Arabalar modeli. Buradaki temel fark, car_id yabancı bir anahtardır, bu nedenle diğer tabloda bulunan bir satır kimliğine ihtiyaç duyar. Bu, aracılığıyla erişilir car1.id Emlak.

Veritabanını sorgulamanız veya herhangi bir kimlik döndürmeniz gerekmez, çünkü SQLAlchemy bunu sizin için halleder (önce verileri verdiğiniz sürece).

Veri Okuma

Bazı verileri yazdıktan sonra, tekrar okumaya başlayabilirsiniz. İşte nasıl sorgulanacağı Arabalar ve Araba sahipleri tablolar:

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

Bu kadar basit. kullanarak sorgu bulunan yöntem oturum, toplantı, celse , modeli belirtirsiniz ve ardından herşey tüm sonuçları alma yöntemi. Sadece bir sonuç olacağını biliyorsanız, o zaman kullanabilirsiniz. ilk yöntem:

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

Modeli sorguladıktan ve döndürülen sonuçlarınızı bir değişkende sakladıktan sonra, verilere nesne aracılığıyla erişebilirsiniz:

print(result[0].color)

Bu kayıt ilk satır olduğundan 'gümüş' rengini yazdırır. İsterseniz sonuç nesnesi üzerinde döngü yapabilirsiniz.

Modelinizde ilişkiyi tanımladığınız için, bir birleştirme belirtmeden ilgili tablolardaki verilere erişmek mümkündür:

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

Bu işe yarar çünkü modeliniz tablo yapınızın ayrıntılarını içerir ve araba öznitelik bir bağlantı olarak tanımlandı arabalar tablo.

ORM'ler Hakkında Sevilmeyecek Neler Var?

Bu eğitimde yalnızca çok temel bilgiler yer almaktadır, ancak bunları bir kez kavradığınızda, ileri düzey konulara geçebilirsiniz. ORM'lerin bazı potansiyel dezavantajları vardır:

  • Herhangi bir sorgu çalıştırılmadan önce modelinizi yazmanız gerekir.
  • Öğrenmek için başka bir yeni sözdizimi.
  • Basit ihtiyaçlar için çok karmaşık olabilir.
  • Başlamak için iyi bir veritabanı tasarımına sahip olmalısınız.

Bu sorunlar kendi başlarına büyük bir sorun değildir, ancak dikkat edilmesi gereken şeylerdir. Mevcut bir veritabanıyla çalışıyorsanız, yakalanabilirsiniz.

Bir ORM'nin sizin için doğru araç olduğuna ikna değilseniz, o zaman aşağıdakileri okuduğunuzdan emin olun. programcıların bilmesi gereken önemli SQL komutları .

Paylaş Paylaş Cıvıldamak E-posta Hemen Windows 11'e Yükseltmeli misiniz?

Windows 11 yakında geliyor, ancak mümkün olan en kısa sürede güncellemeniz mi yoksa birkaç hafta beklemeniz mi gerekiyor? Hadi bulalım.

Sonrakini Oku
İlgili konular
  • Programlama
  • piton
  • SQL
  • Kodlama Eğitimleri
Yazar hakkında Joe Coburn(136 Makale Yayınlandı)

Joe, İngiltere'deki Lincoln Üniversitesi'nden Bilgisayar Bilimleri mezunudur. Profesyonel bir yazılım geliştiricisi ve drone uçurmadığı veya müzik yazmadığı zamanlarda, genellikle fotoğraf çekerken veya video çekerken bulunabilir.

çoklu bağımlı açılır liste excel
Joe Coburn'dan Daha Fazla

Haber bültenimize abone ol

Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!

Abone olmak için buraya tıklayın