12 Eylül 2008 Cuma

Django Notları - 4 (Veritabanı Kullanımına Giriş)

Gökmenin yazdığı Django yazılarını takip ettik, artık Django ile dinamik içeriğe sahip web siteleri yapabiliyoruz neşe doluyuz; fakat modern web uygulamalarında çokca veri ile güreş tutmamız gerekmekte. Forum tasarladığınızı düşünün her girdiyi nerede saklayacaksınız text dosyalarda mı? turşu (pickle) kullanarak mı? Bunların arasında arama nasıl yapacaksınız? Bu tip sorunların çözümü verilerinizi veritabanında tutmaktan geçiyor.

Veritabanı nedir?



Bu sorunun cevabını kısaca şöyle cevaplayabiliriz. Bir veritabanı sunucusu sizin için istediğiniz verileri tablolar halinde saklar. Örneğin ,telefon defteriniz isim ve numaraları barındıran şekildeki gibi bir tablo olarak kaydedilebilir. (Türk programcı neden devamlı sözlük ve telefon defteri yapar?)

idİSİMNUMARA
1Ahmet123 12 12
2Dalyan444 16 00
3Hüseyin321 2222
4Kemal555 44 23


Daha sonra veritabanı sunucusuna sql dilinde cümleler gönderir, cevaplar alırız. örneğin, "Adı Hüseyin olan kişinin telon numarası nedir?" diye sorduğumuzda veritabanı sunucusu size 123 12 12 cevabını döndürür. Burada çocuk oyuncağı gibi bahsettiğime bakmayın. Bu konuda yazılmış 2 kiloluk kitaplar bulunuyor. Veritabanı sunucularının genel çalışma mantığına bu kadar değinmemiz yeterli. Daha fazla bilgi için "internet derya deniz, arama yapmayan domuz" diyor konumuza devam ediyorum.

Aptal Yöntem



Php dilinden anlayanlar Django daki veritabanı hizmetini görünce biraz üzülecekler (daha kolay bir yöntemi varmıydı bilmiyorum ama ben gayet sorgu yazıyordum) zira tek satır SQL cümlesi yazmadan bütün verilerinize taklacı güvercin muamelesi yapabiliyor , kaydetme , silme , güncelleme ihtiyaçlarınızı karşılayabiliyorsunuz.

Fakat yinede bilgi vermek, klasik veritabanı kullanımı ile arasındaki farkları gösterebilmek amacıyla biraz önce belirttiğim telefon rehberindeki kayıtları okumaya yarayan kodu veriyorum.

from django.shortcuts import render_to_response # buranın ne olduğunu Gökmen açıklayacak
import MySQLdb

def book_list(request):
db = MySQLdb.connect(user='root',db='mydb',passwd='',host='localhost') # veritabanımıza bağlantı yapıyoruz
cursor = cursor.db.cursor() # bir kürsor oluşturuyoruz.
cursor.execute('SELECT numara FROM rehber WHERE isim = "Hüseyin"') # bir sql cümleciği kuruup sorgu yapıyoruz.
names = [row[0] for row in cursor.fetchall()] # çıkan sonuçları ayrıştırıyoruz.
db.close() # bağlantıyı kapat # veritabanına olan bağlantıyı kapatıyoruz.
return render_to_response('book_list.html',{'names':names}) # yazdırıyoruz.


Böyle bir kodlama yaptıysak karalar bağlayabiliriz çünkü..

  • Veritabanı bağlantısı mysql üzerinden sabit ayarlarla yapıldı (buna hard-coded deniyor) ileride değiştirmek istersek uğraşımız yaman olacak. Hele bir de mysql yerine başka bir veritabanı kullanmaya kalkarsak vay halimize..

  • İşimize yaramayacak birsürü kod yazdık bağlantıyı yaptık kürsör ayarladık bağlantıyı kapattık vesaire..

  • MySQL bilgisine ihtiyaç duyduk. Python'la Django ile zaten toslaşıp duruyorken birde SQL gibi derya deniz bir konuyu öğrenmemiz gerekti.


Django Avantajları



Django uygulama parçacıkları arasında gevşek bağ kurma felsefesi ile çalışıyor. Böylelikle parçalar üzerinde herhangi bir değişiklik yaptığımız zaman uygulamanın geneli bundan ya hiç etkilenmiyor ya da çok az etkileniyor. Örneğin önceki konularda template sistemlerini incelerken programın çalışma mekanizması ile sergilenme aşamasını birbirinden ayırdık. Template'ler değişse bile uygulamanın diğer alanlarına etki etmedi. Django veritabanı ile olan uğraşımız sırasında bize aynı imkanları sunuyor. Örneğin MySQL den PostgreSQL veritabanı motoruna geçişiniz 3 satırlık değişiklik gerektiriyor...

Veritabanını Ayarlamak



Django'nun veritabanı katmanını incelemeye başlayabiliriz. Uygulamamız boyunca kullanacağımız veritabanı ayarlarını settings.py içerisinde belirtiyoruz.

Settings.py dosyasını açtığınız zaman veritabanı ile ilgili şu satırları görürsünüz.
DATABASE_ENGINE = ''
DATABASE_NAME = ''
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''


Zaten yanlarında açıklamaları # işaretinden sonra belirtilmiş fakat ben yinede burada tekrar değineyim.

DATABASE_ENGINE:

Kullanacağınız veritabanı motoru, Django "mysql","postgresql","postgresql_psycopg","sqlite3","oracle" veritabanlarına tam destek vermekte birini seçip yazın.

DATABASE_NAME:

Bir veritabanı sunucusu içinde birden fazla veritabanı barındırır. Kullanacağımız veritabanı ismi buraya gelecek. (veritabanı sunucusu > veritabanı > tablolar)

DATABASE_USER:

Bir veritabanı sunucusunda oturum açmak için kullanıcı adı ve şifreye ihtiyaç duyarsınız.

DATABASE_PASSWORD

acaba nedir nedir?

DATABASE_HOST

Veritabanı sunucunuz Django uygulamanızın çalıştığı sunucu ile aynı makinada çalışıyorsa localhost, değil ise veritabanı sunucunuzun ip adresi olmalıdır. Sqlite3 kullanıyorsanız burayı boş bırakın.

DATABASE_PORT

Boş bırakırsanız öntanımlı porttan bağlanmaya çalışır. Port numarasını girerseniz verdiğiniz port numarasından bağlanmaya çalışır.

Bütün bu ayarları doğru bir şekilde yaptığınızdan emin olmak için terminalde projenizin bulunduğu dizine gidip, python manage.py shellkomutunu verin. Bu sırada bir yanda youtube ile video izlemeye çalıştığınız için karşınıza çikita ajdar gelecek (bana öyle oldu aklım çıkıyordu) kapatın youtube'u.. neyse karşınıza python interaktif kabuğu gelecek fakat Django ile yapılmış ayarlarnız yüklenmiş olacak. Ne demek istediğim aşağıdaki örnekle yeterince kendini belli ediyor zaten.
>> from django.db import connection
>>>cursor = connection.cursor()


Bu komutlar projenizin veritabanı ayarları ile veritabanına django üzerinden bağlantı kurmaya çalışacak. Eğer herhangi bir hata döndürmez ise ayarlarımızı doğru yaptık demektir. Peki biz bu şekilde mi kullanacağız? tabii ki hayır :). Bir dahaki yazımda Django'da veri modelleri ile ilgilenecek ilk uygulamamızı yaratacağız.

Hiç yorum yok:

Yorum Gönder