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

  • Michael Fisher
  • 0
  • 4426
  • 42
reklâm

Nesne-ilişkisel haritalamayı (ORM) duymuş olabilirsiniz. Birini bile kullanmış olabilirsin, ama tam olarak ne? Ve onları Python'da nasıl kullanıyorsunuz??

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

ORM Nedir??

Nesne-ilişkisel haritalama (ORM) bir veritabanına erişmek için kullanılan bir programlama tekniğidir. Veritabanınızı bir dizi nesneye gösterir. Veri eklemek veya almak için SQL komutları yazmak zorunda değilsiniz, nesnelere iliştirilmiş bir dizi nitelik ve yöntem kullanıyorsunuz.

Kulağa karmaşık ve gereksiz gelebilir, ancak size çok zaman kazandırabilir ve veritabanınıza erişimi kontrol etmenize yardımcı olabilir.

İşte bir örnek. Veritabanınıza ne zaman bir şifre eklerseniz şifrelemek istediğinizi, web sitesi şifre güvenliğinde açıklandığı şekilde söyleyin Her Güvenli Web Sitesi Şifrenizle Bunu Yapar Her Güvenli Web Sitesi Şifrenizle Yapıyor Sitelerin şifrenizi nasıl güvende tuttuğunu hiç merak ettiniz mi ihlalleri? . Bu basit kullanım durumları için bir sorun değildir-yerleştirmeden önce hesaplamayı yaparsınız. Peki ya kodun birçok yerine bir kayıt eklemeniz gerekirse? Ya başka bir programcı masanıza eklerse ve siz bilmiyorsanız?

Bir ORM kullanarak, veritabanınızdaki herhangi bir satır veya alana ne zaman ve nerede erişilirse erişilmeli, önce diğer özel kodunuzun çalıştırıldığından emin olmak için kod yazabilirsiniz..

Bu aynı zamanda bir “tek bir gerçeğin kaynağı”. Özel bir hesaplamayı değiştirmek istiyorsanız, bunu yalnızca bir yerde değil, birkaç tanesinde değiştirmek zorundasınız. Bu ilkelerin çoğunu Python'da nesne yönelimli programlama (OOP) ile gerçekleştirmek mümkündür. Python Nesne Yönelimli Programlama için Yeni Başlayanlar Kılavuzu Python Nesne Yönelimli Programlama için Yeni Başlayanlar Kılavuzu Python'un güçlü yönlerinden tam anlamıyla faydalanmak için nasıl Python, nesne yönelimli programlama (OOP) ile çalışır. Ancak, ORM'ler bir veritabanına erişimi kontrol etmek için OOP ilkeleri ile paralel çalışır.

Bir ORM kullanırken dikkat etmeniz gereken bazı şeyler vardır ve bir tane kullanmak istemeyeceğiniz durumlar vardır, ancak genellikle, özellikle büyük bir kod tabanında.

Python'daki ORM'ler SQLAlchemy Kullanarak

Python'daki birçok görev gibi, bir modül almak da kendi modülünüzden daha hızlı ve kolaydır. Elbette, kendi ORM'nizi yazmanız mümkündür, ancak neden tekerleği yeniden icat etmelisiniz??

Aşağıdaki örneklerin tümü, popüler bir Python ORM olan SQLAlchemy'yi kullanır, ancak uygulamadan bağımsız olarak ilkelerin çoğu uygulanır.

SQLAlchemy için Python Kurma

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

Bu örneklerle birlikte takip etmek için Python 3.6 kullanmanız gerekecektir. Eski sürümler çalışacak olsa da, aşağıdaki kodun çalışabilmesi için bazı değişikliklere ihtiyacı olacaktır. Farklardan emin değil misiniz? Python SSS Python Programlama Hakkında En Sık Sorulan Sorular Python Programlama Hakkında En Sık Sorulan Sorular Bu makalede, yeni başlayanlar için Python hakkında bilmeniz gereken her şeyi size yönlendiriyoruz. tüm farklılıkları kapsar.

Kodlamadan önce, bir Python ortamı kurmanız gerekir Python Sanal Ortamının Nasıl Kullanılacağını Öğrenin Python Sanal Ortamının Nasıl Kullanılacağını Öğrenin Deneyimli bir Python geliştiricisi olun veya yeni başlıyor olsanız da, sanal bir ortamın nasıl kurulduğunu öğrenmek önemlidir Herhangi bir Python projesi için. , diğer ithal Python paketleriyle ilgili sorunları önleyecektir.

Python paket yöneticisi PIP'iniz olduğundan emin olun Windows, Mac ve Linux'ta Python PIP Nasıl Kurulur Windows, Mac ve Linux'ta Python PIP Nasıl Kurulur Pek çok Python geliştiricisi, Python için her şeyi daha kolay hale getirmek için PIP adlı bir araca güvenir ve Daha hızlı. İşte Python PIP'in nasıl kurulacağı. Python'un en modern sürümleriyle birlikte gelen.

Gitmeye hazır olduğunuzda, SQLAlchemy'i hazırlayarak başlayabilirsiniz. Python ortamınızın içinden komut satırına SQLAlchemy'i pip kurulumu komut:

pip kurulum SQLAlchemy-1.2.9

1.2.9 sürüm numarası. En son paketi almak için bunu bırakabilirsiniz, ancak belirli olması iyi bir uygulamadır. Yeni bir sürümün geçerli kodunuzu ne zaman bozabileceğini bilmiyorsunuz.

Şimdi kodlamaya başlamaya hazırsın. Bir Python bağlantısını kabul etmek için veritabanınızı hazırlamanız gerekebilir, ancak aşağıdaki örneklerin tümü bellekte oluşturulan bir SQLite veritabanını kullanmaktadır..

SQLAlchemy'deki Modeller

ORM’nin temel bileşenlerinden biri model. Bu, bir tablonun neye benzemesi gerektiğini ve nasıl çalışması gerektiğini özetleyen bir Python sınıfıdır. Bu ORM versiyonudur TABLO OLUŞTURMA SQL deyimi. Veritabanınızdaki her tablo için bir modele ihtiyacınız var.

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

sqlalchemy'den import create_engine sqlalchemy.ext.declarative import declarative_base Base = declarative_base () engine = create_engine ('sqlite: //') # Veritabanında veri tabanı oluşturun Base.metadata.create_all (motor) # Veritabanında tüm tabloları oluşturun 

Bu kod birkaç şey yapar. Python'un ihtiyaç duyduğu SQLAlchemy modüllerini nerede bulacağını anlaması için ithalat gereklidir. Modelleriniz kullanacak declarative_base daha sonraları ve beklendiği gibi çalışacak yeni modelleri yapılandırır.

create_engine yöntemi veritabanınızla yeni bir bağlantı oluşturur. Zaten bir veritabanınız varsa, değiştirmeniz gerekir. sqlite: // veritabanınıza URI. Olduğu gibi, bu kod sadece bellekte yeni bir veritabanı yaratacaktır. Kodunuz yürütülmeyi bitirdiğinde veritabanı yok edilir.

Sonunda, create_all yöntem, veritabanınızdaki modlarınızda tanımlanan tüm tabloları oluşturur. Henüz herhangi bir model tanımlamadığınız için hiçbir şey olmayacak. Herhangi bir sorun veya yazım hatası yapmamak için devam edin ve bu kodu çalıştırın..

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

sqlalchemy ithalat sütunundan, Tamsayı, Dize

Bu ithalatı sütun, tamsayı, ve sicim SQLAlchemy'den modüller. Veritabanı tablolarının, alanlarının, sütunlarının ve veri tiplerinin nasıl çalıştığını tanımlar..

Altında declarative_base, Model sınıfınızı oluşturun:

sınıf Otomobiller (Temel): __tablename__ = 'otomobiller' kimliği = Sütun (Tamsayı, birincil_key = Gerçek) make = Sütun (Dize (50), nullable = Yanlış) renk = Sütun (Dize (50), nullable = Yanlış)

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

Her sınıf miras almalı baz. Veritabanı tablo adınız, __Tablo ismi__. Bu, sınıf adıyla aynı olmalıdır, ancak bu sadece bir öneridir ve eşleşmezse hiçbir şey kopmaz.

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 özniteliği, SQLAlchemy'ye oluşturmasını söyler. İD birincil anahtar olarak sütun.

Devam et ve son bir ithalat ekle, bu sefer Yabancı anahtar modülü. Bunu yanına ekle sütun ithalat:

sqlalchemy ithalat sütunundan, ForeignKey, Integer, String

Şimdi ikinci bir model sınıfı oluşturun. Bu sınıfa denir Araba sahipleri, ve depoda bulunan belirli otomobillerin mal sahibi bilgilerini saklar. Arabalar tablosu:

sınıf CarOwners (Base): __tablename__ = 'carowners' id = Sütun (Tamsayı, birincil_key = Doğru) name = Sütun (Dize (50), nullable = Yanlış) yaş = Sütun (Tamsayı, nullable = Yanlış) car_id = Sütun (Tamsayı, ForeignKey ('cars.id')) araba = ilişki (Arabalar)

Burada tanıtılan birkaç yeni özellik var. car_id alan yabancı anahtar olarak tanımlandı. İle bağlantılı İD içinde arabalar tablo. Büyük harf sınıf adının yerine, küçük harf tablo adının nasıl kullanıldığına dikkat edin.

Son olarak, bir öznitelik araba olarak tanımlanır ilişki. Bu, modelinizin İnternet’e erişmesine izin verir. Arabalar Bu değişken üzerinden tablo. Bu aşağıda gösterilmiştir.

Bu kodu şimdi çalıştırırsanız, hiçbir şeyin olmadığını göreceksiniz. Çünkü henüz farkedilir bir şey yapmasını söylemedin..

SQLAlchemy içindeki nesneler

Artık modelleriniz oluşturulduğundan, nesnelere erişmeye başlayabilir ve verileri okuyabilir ve yazabilirsiniz. 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, okumadan önce veritabanına bazı veriler girmeniz gerekir. Mevcut bir veritabanı kullanıyorsanız, önceden verilere sahip olabilirsiniz. Her iki durumda da, nasıl veri ekleyeceğinizi bilmek hala çok yararlı.

Yazmaya alışkın olabilirsiniz INSERT SQL'deki ifadeler. SQLAlchemy bunu sizin için halleder. İşte içine bir satır eklemek nasıl Arabalar modeli. İçin yeni bir içe aktarma ile başlayın sessionmaker:

sqlalchemy.orm ithalat oturumundan

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

DBSession = oturum üreticisi (bağ = motor) oturumu = DBSession ()

Şimdi bunu altına koy. create_all Beyan:

car1 = Arabalar (make = "Ford", renkli = "gümüş") session.add (car1) session.commit ()

Hadi şu kodu çözelim. Değişken car1 dayalı bir nesne olarak tanımlanır Arabalar modeli. Yapısı ve rengi parametre olarak ayarlanır. Bu demek gibi “Beni bir araba yap ama veritabanına yazma.”. Bu araba bellekte var ama yazılmayı bekliyor.

Arabayı oturuma ekle session.add, ve sonra veritabanına yaz session.commit.

Şimdi bir kullanıcı ekleyelim:

owner1 = CarOwners (name = "Joe", yaş = "99", car_id = (car1.id)) session.add (owner1) session.commit ()

Bu kod, önceki sayfalarla neredeyse aynıdır. Arabalar modeli. Buradaki ana fark şudur: car_id yabancı bir anahtar olduğundan, diğer tabloda bulunan bir satır kimliğine ihtiyacı vardır. Bu, car1.id özellik.

SQLAlchemy bunu sizin için hallettiğinden veritabanını sorgulamanız veya herhangi bir kimlik bilgisi döndürmeniz gerekmez (ilk önce verileri işlediğiniz sürece).

Veri okuma

Bazı verileri yazdıktan sonra, geri okumaya başlayabilirsiniz. İşte sorgulamak için nasıl Arabalar ve Araba sahipleri tablolar:

sonuç = session.query (Arabalar) .all ()

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

sonuç = session.query (Arabalar) .first ()

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

baskı (sonuç [0] .color)

Bu renk yazdırır “gümüş”, Bu kayıt ilk satır olduğu gibi. İsterseniz sonuç nesnesi üzerinde döngü yapabilirsiniz.

Modelinizde ilişkiyi tanımladığınızda, birleşim belirtmeden ilgili tablolardaki verilere erişmek mümkündür:

result = session.query (CarOwners) .all () baskı (sonuç [0] .name) baskı (sonuç [0] .car.color)

Bu, modelinizde tablo yapınızın ayrıntılarını ve araba öznitelik bir bağlantı olarak tanımlandı arabalar tablo.

ORM'ler Hakkında Ne Sevmiyorum?

Bu eğitim sadece temel bilgileri içeriyordu, ancak bir kez bunları çözdüğünüzde, ileri konulara geçebilirsiniz. ORM'lerin bazı olumsuz yönleri vardır:

  • Herhangi bir sorunuzun çalışabilmesi için 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ınızın olması gerekir.

Bu konular kendi başlarına büyük bir sorun değil, ama dikkat edilmesi gerekenler. Mevcut bir veritabanıyla çalışıyorsanız, yakalanabilir.

Bir ORM'nin sizin için doğru araç olduğuna ikna olmadıysanız, programcıların bilmesi gereken önemli SQL komutlarını okuduğunuzdan emin olun. 13 En Önemli SQL Komutları web sitesi bir şekilde bir veri tabanı kullanıyor ve Structured Query Language (SQL) ile birleştirildiğinde, veri işleme olanakları gerçekten sonsuz. .




Henüz no comments

Modern teknoloji hakkında basit ve uygun fiyatlı.
Modern teknoloji dünyasında rehberiniz. Her gün bizi çevreleyen teknolojileri ve araçları nasıl kullanacağınızı ve Internet'te ilginç şeyleri nasıl keşfedeceğinizi öğrenin.