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, inimport 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.
Bu yorum yazar tarafından silindi.
YanıtlaSilTeşekkürler.Elinize Sağlık..
YanıtlaSilHarikasınız ! Bu kadar güzel anlatılamazdı. :)
YanıtlaSil