Python ORM Yapısı ve Peewee ORM

BufGix

Uzman üye
7 Ağu 2015
1,089
2
Phobos/Space
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ı ORM’ler: 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:

PALA

Özel Üye
26 Mar 2018
12,753
33
Elinize sağlık hocam,dün itibariyle python'a başladım.Hayırlısı olsun sonra C++ diye yardırıcam bakalım.
 

BufGix

Uzman üye
7 Ağu 2015
1,089
2
Phobos/Space
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.