Python ile MySQL Bağlantısı ( MySQLdb )

MySQLdb Nedir?

MySQLdb, Python ile MySQL vertabanı sunucusu arasındaki iletişimi sağlamak için kullanılan bir Python arayüzüdür (modülüdür).

MySQLdb Modülünü Nasıl Yüklerim?

Devam etmeden önce, sizde makinanızda MySQLdb'nin yüklü olup/olmadığından emin olun. Bunun için sadece aşağıdaki komutu yazın ve çalıştırın;
#!/usr/bin/python

import MySQLdb
Aşağıdaki sonuç (çıktı) çıkması durumunda MySQLdb modülü kurulu değil demektir.
Traceback (most recent call last):
  File "test.py", line 3, in 
    import MySQLdb
ImportError: No module named MySQLdb
Buradan MySQLdb Download ile indirebilir ve aşağıdaki gibi MysQLdb modülünü yükleyebilirsiniz. 
$ gunzip MySQL-python-1.2.2.tar.gz
$ tar -xvf MySQL-python-1.2.2.tar
$ cd MySQL-python-1.2.2
$ python setup.py build
$ python setup.py install
Not: Modülü kurmak için root yetkisine sahip olduğunuzdan emin olun.

Veritabanı Bağlantısı

MySQL vertabanı bağlantısı yapmadan önce aşağıdakilerden emin olun −
  • TESTDB adında bir veritabano oluşturun.
  • TESTDB adlı veritabanımızın içine EMPLOYEE adında bir tablo oluşturun..
  • Bu tablo alanları FIRST_NAME, LAST_NAME, AGE, SEX ve INCOME olsun.
  • TESTDB veritabanına erişmek için Kullanıcı Adı "testuser" ve Şifre "test123" olarak ayarlayın.
  • MySQLdb modülümüzün Python'da düzgün yüklü olduğuna emin olun.
  • BU konuyu kavrayabilmek için MySQL temellerini bilin. Bilmiyorsanız tıklayın. MySQL Temelleri.

Örnek

Aşağıda MySQL vertabanı "TESTDB" ile ilgili bir bağlantı örneği bulunmaktadır.
#!/usr/bin/python

import MySQLdb

# Veritabanı baglantisi için
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# cursor() yöntemini kullanarak bir cursor nesnesi hazırlıyoruz
cursor = db.cursor()

# SQL kodlarını çalıştırmak için execute() fonksiyonunun kullıyoruz.
cursor.execute("SELECT VERSION()")

# Tek bir satırı döndürmek için fetchone() yöntemini kullanıyoruz..
data = cursor.fetchone()

print "Database version : %s " % data

# Veritabanı bağlantısını kesmek için
db.close()
Bu komut dosyasını çalıştırdığımızda benim makinamda aşağıdaki çıktıyı vermektedir.
Database version : 5.0.45

Veritabanına Tablo Oluşturma

Veritabanı içine öğeleri eklemek için ve bu öğeleri çalıştırmak için tabloya gereksinim duyarız. Burada da tablomuzu oluşturup hazır duruma geleceğiz.

Örnek

Bize gerekli EMPLOYEE adında bir tablo oluşturalım:
#!/usr/bin/python

import MySQLdb

# Veritabanına bağlantı yapılıyor.
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# cursor() yöntemini kullanarak bir cursor nesnesi oluşturuyoruz.
cursor = db.cursor()

# execute() fonksiyonu ile varsa tablodaki bütün verileri siliyoruz.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# Aşağıdaki şartlarda bir tablo oluşturuyoruz.
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# Veritabanı bağlantımızı sonlandırıyoruz.
db.close()

INSERT işlemi

Bir veritabanı tablosuna kayıt girebilmek için kullandığımız işlemdir.

Örnek

Aşağıdaki örnekte, EMPLOYEE tablomuza bir kayıt eklememiz için SQL olarak INSERT kodunu kullanıyoruz. −
#!/usr/bin/python

import MySQLdb

# Veritabanı bağlantısını gerçekleştiriyoruz.
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# cursor() yöntemini kullanarak bir cursor nesnesi oluşturuyoruz.
cursor = db.cursor()

# Sql kodlarına INSERT ile sorgusu ile veriler ekliyoruz.
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # Execute ile SQL kodlarını çalıştırıyoruz.
   cursor.execute(sql)
   # Commit ile veritabanında değişikleri gerçekleştiriyoruz.
   db.commit()
except:
   # Hata olursa işlemleri geri al
   db.rollback()

# Veritabanından çıkış yap
db.close()
Dİnamik SQL sorguları oluşturabilmek için yukrıdaki örnek aşağıdaki gibi yapılabilir. −
#!/usr/bin/python

import MySQLdb

# Vertabanı bağlantısını gerçekleştiriyoruz.
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# cursor() yöntemini kullanarak bir cursor nesnesi oluşturuyoruz.
cursor = db.cursor()

# SQL kodları ile veritabanına aşağıdaki bilgileri ekliyoruz.
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # Execute yöntemi ile sql kdlarımızı çalıştırıyoruz.
   cursor.execute(sql)
   # Commit ile veritabanında değişiklikleri gerçekleştiriyoruz.
   db.commit()
except:
   # Hata durumunda rollback ile geri alıyoruz.
   db.rollback()

# Veritabanından çıkış yapıyoruz.
db.close()

Örnek

Aşağıdaki kod ile de doğrudan bunu çalıştırabilirsiniz.
user_id = "test123"
password = "password"

con.execute('insert into Login values("%s", "%s")' % \
             (user_id, password))
..................................

READ İşlemi

READ işlemi ile veritabanından çektiğimiz biligleri okumamıza yarar.
Veritabanı bağlantısı sağlandıktan sonra, bu veritabanına sorgı yapmak için hazırız demektir. Bir veritabanı tablosundan bir çok değeri çekmek için fetchall() bir değeri çekmek için ise fetchone() fonksiyonlarını kullanabiliriz. 
  • fetchone(): Çekilen sonuç değerinin sadece bir değerini getirir..
  • fetchall(): Çekilen sonuç derğerinin bütün değerlerini getirir.
  • rowcount: Bu fonksiyon execute() fonksiyonu ile etkilenen satırların sayısını döndürür.

Örnek

Aşağıdaki kodlarda ise maaşı 1000'den fazla olanları listeler.−
#!/usr/bin/python

import MySQLdb

# Veritabanına bağlanıyoruz
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# cursor() yöntemi ile cursor nesnesi oluşturuyoruz.
cursor = db.cursor()

# SQL kodlarımızı bir değişkene aktarıyoruz
sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # Execute yöntemi ile sql kdlarımızı çalıştırıyoruz.
   cursor.execute(sql)
   # Liste içindeki listelerden tüm satırları çekiyoruz
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # Now print fetched result
      print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
             (fname, lname, age, sex, income )
except:
   print "Error: unable to fecth data"

# Veritabanı bağlantısını sonlandırıyoruz
db.close()
Bu kodlar aşağıdaki sonucu gösterecektir. −
fname=Mac, lname=Mohan, age=20, sex=M, income=2000

UPTADE İşlemi

UPDATE işlemi ile zaten veritabanında var olan bilgileri değiştirmek için kullanılır. Bir nevi bilgileri güncelleme için kullanılır. -
Aşağıdaki örnekteki kodlar bütün SEX değerlerini "M" olarak değiştirir ve AGE değerlerini ise bir fazlası ile günceller.

Örnek

#!/usr/bin/python

import MySQLdb

# Veritabanına bağlanıyoruz
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# cursor() yöntemi ile cursor nesnesi oluşturuyoruz.
cursor
= db.cursor() # SQL kodlarıyla tablomuzda güncelleme yapıyoruz sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M') try: # Execute yöntemi ile sql kdlarımızı çalıştırıyoruz. cursor.execute(sql) # Commit ile veritabanında değişiklikleri gerçekleştiriyoruz. db.commit() except: # Hata durumunda rollback ile geri alıyoruz. db.rollback() # Veritabanından çıkış yapıyoruz. db.close()

DELETE İşlemi

Eğer veritabanından bazı kayıtları silmek istiyorsak DELETE işlemini kullanırız. Aşağıdaki kodda ise AGE (yaşı) 20 den büyük olan tüm kayıtları silen program gözükmektedir.   −

Örnek

#!/usr/bin/python

import MySQLdb

# Veritabanına bağlanıyoruz.
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# cursor() yöntemi ile cursor nesnemizi oluşturuyoruz.
cursor = db.cursor()

# SQL kodlarında DELETE işlemini yapıyoruz
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute yöntemi ile sql kdlarımızı çalıştırıyoruz.
   cursor.execute(sql)
   # Commit ile veritabanında değişiklikleri gerçekleştiriyoruz.
   db.commit()
except:
   # Hata durumunda rollback ile geri alıyoruz.
   db.rollback()

# Veritabanından çıkış yapıyoruz
db.close()

COMMIT İşlemi

Commit işlemi veritabanındaki tablolar üzerinde yapılan herhangi bir işlemin tablolara kalıcı olarak yazılma işlemidir.
Bu yöntemi aşağıdaki gibi kullanabiliriz
 db.commit()

ROLLBACK İşlemi

Eğer yaptığınız değişiklerin birinden veya bir kaçından memnun değilseniz. Bunlardan geri dönmek için rollback() deyimini kullanabilirsiniz.
Aşağıda rollback 'in basit bir kullanımı gösterilmiştir.
 db.rollback()

Veritabanında Çıkış

Bağlı olduğumuzun veritabanından çıkamak için , close() fonksiyonunu kullanırız.
 db.close()
Eğer veritabanından çıkış yapılırsa commit() edilmemiş değerler kaybolur.

Yorumlar

Yorum Gönder

Popüler Yayınlar