ORM(Object-relational mappers) ; bir ilişkisel veritabanıyla nesneyi bağlamak için M-eta data (veri hakkında veri, üstbilgi) tanımlayan programlama tekniğidir. Nesne yani kod ,Python,Java, C# gibi nesne yönelimli programlama(oop) dillerinde yazılır. ORM; ilişkisel veritabanı ve oop arasındaki veri dönüşümünü gerçekleştirir.Yüzeysel olarak bakıcak olursak ORM, yazılım ile veritabanı arasında bir köprü görevi görür.
Resim ORM Yapısı
* Veritabanındaki tabloları, sınıflara çevirir.
* ORM sayesinde kod yazarken veritabanında daha az zaman harcarız.
* ORM; veri kaynağı değiştiğinde onu kapsüller (encapsulates) ve gizler.
* Geliştirme ve bakım maaliyeti düşüktür. Çünkü nesne-veritabanı, veritabanı-nesne dönüşümünü otomatik gerçekleştirir.
* Daha az SQL sorguları yazarız.
* Veritabanını harita olarak önümüze sunar böylece karmaşık veritabanlarını anlamak kolaylaşır.
* ORM uygulama katmanı altında bulunur.
* ORM tüm nesne yönelimli programlama dilleri için mevcuttur.Java için bazı ORMler: Hibernate, JPA, EclipseLink
* Python icin bazı ORM'ler: SQLAlchemy,Peewee,Django ORM,PonnyORM...
Resim ORM Python
Biz bu konuda Peewee ORM'sini inceleyeceğiz
Resim ORM Yapısı
* Veritabanındaki tabloları, sınıflara çevirir.
* ORM sayesinde kod yazarken veritabanında daha az zaman harcarız.
* ORM; veri kaynağı değiştiğinde onu kapsüller (encapsulates) ve gizler.
* Geliştirme ve bakım maaliyeti düşüktür. Çünkü nesne-veritabanı, veritabanı-nesne dönüşümünü otomatik gerçekleştirir.
* Daha az SQL sorguları yazarız.
* Veritabanını harita olarak önümüze sunar böylece karmaşık veritabanlarını anlamak kolaylaşır.
* ORM uygulama katmanı altında bulunur.
* ORM tüm nesne yönelimli programlama dilleri için mevcuttur.Java için bazı ORMler: Hibernate, JPA, EclipseLink
* Python icin bazı ORM'ler: SQLAlchemy,Peewee,Django ORM,PonnyORM...
Resim ORM Python
Biz bu konuda Peewee ORM'sini inceleyeceğiz
Peewee ORM :
---------------------
Peewee yukarda bahsi gecen diğer ORM'ler gibi bir Python ORM'sidir. SqlAlchemy den daha basit ve daha küçüktür.
Kod yazarak Peewee ORM'yi daha iyi anlayalim.
Oncelikle Peewee ORM'yi makinemize kuralım.
Kod:
pip install peewee
Veya Git deposu üzerinden yükleyebilirsiniz.
Kod:
git clone https://github.com/coleifer/peewee.git
cd peewee
python setup.py install
Şimdi importlama işlemi yapalım ve kod yazmaya başlayalım.
Kod:
from peewee import *
Daha sonra Databasemizi tanımlayalım
Kod:
from peewee import *
DB = SqliteDatabase('/Desktop/test/MyDatabase.db')
Görüldüğü gibi databasemizi tanımladik Sqlite kulanacağımızı belirttik ve parametre olarak databasenin yolunu gösterdik.
Daha sonra databaseye kayıt olacak bir class tanımlayalım.
Kod:
class Kisi(Model):
class M-eta:
database = DB #Bu obje artik MyDatabase.db ye bagli
Sınıfimızı peewee'nin Model sınıfı ile genişlettik ve M-eta classına Kişi sınıfının bundan sonra yukarida belirtiğimiz DB'yı kullanacağını söyledik.
Daha sonra classımıza alanlar ekleyelim.
Kod:
class Kisi(Model):
name = TextField()
age = IntegerField()
class M-eta:
database = DB
Son olarak databasemize Kisi nesnelerini yazdırmak için table oluşturalım. Bunu DB.create_tables() ile oluşturacagız.
Kod:
def init():
DB.connect()
DB.create_tables ([Kisi], safe = True)
DB.close()
Burada safe parametresi programı tekrar calıştırdığımızda daha önce oluşmuş olan tablesleri görmezden gelmesi icin.
Artık herşey hazır. Simdi databaseye kayıt ekleyelim. Bunu için 2 yöntem var.
Kod:
omer = Kisi(name = 'Omer', age = 18) #Omer nesnesi tanimlandi
omer.save() #Db ye kayit oldu
Yada Kisi sınıfının methodu kullanılabilir Kisi.create()
Kod:
omer = Kisi.create(name = 'Omer', age = 18) #Db ye kayit oldu
Projenin bütünü:
Kod:
from peewee import *
DB = SqliteDatabase('/Desktop/test/MyDatabase.db')
def init():
DB.connect()
DB.create_tables([Kisi], safe = True)
DB.close()
class Kisi(Model):
name = TextField()
age = IntegerField()
class M-eta:
database = DB
init()
omer = Kisi.create(name = 'Omer', age = 18)
Databaseden verileri silmek icin Kisi classının delete_instance() methodu kullanılır.
Kod:
omer.delete_instance()
Son olarak birkaç sorgulama işlemi yapalım.
Databasedeki tüm nesneleri getirmek icin select() methodu kullanılır.
Kod:
for obje in Kisi.select():
print obje.name
print obje.age
#Omer
#18
Databaseden her zaman butun verileri getirmek istemeyebiliriz. Bunun için where() kullanmamız gerek.
Kod:
obje = Kisi.select().where(Kisi.name == 'Omer').get()
print obje.name
print obje.age
#Omer
#18
where() methodunun nasıl parametre aldığına dikkat edin aynı if - else deki gibi bir sorgu ifadesi şeklinde (==). Kodun sonunda ise get() ile objeyi elde ediyoruz.
Burada konumun sonuna geliyorum. Bu anlatıklarım peewee nin çok küçük bir kısmı. Umarım Python ORM hakkında kafanızda birseyler oluşmuştur.İyi calısmalar...
Kaynak:
peewee â peewee 3.2.0 ********ation
https://www.fullstackpython.com/object-relational-mappers-orms.html
https://www.kadinyazilimci.com/ormobject-relational-mapping-nedir/
Son düzenleme: