Merhaba, Python ile ilginlenen ya da ilgilenmek isteyen arkadaşlar için veritabanı işlemleri konusunda bir makale hazırlamaya karar verdim zira bir programlama dili için veritabanı bağlantısı vazgeçilmez bir özelliktir. Python için de durum böyledir ve MySQL, MsSQL, PostgreSQL gibi bir çok veritabanını kullanabilirsiniz. Bu makalede açık kaynak kodlu olduğu için python ile kolay entegre olan MySQL veritabanını kullanacağız bunun için bu adresten exe uygulamasını indirip MySQLdb modulünü bilgisayarınıza kurmalısınız kurulum bittiğinde gerekli dosyalar C:/Python27 altındaki python modülleri arasına kopyalanır. Mysql modülünü kurduktan sonra asıl makalemizin konusu olan
PonyORM modülü kullanımına geçelim. Diğer ORM kütüphaneleri gibi geliştiricileri katı SQL sorgularından kullanıp Python sözdizimi ile bütünleşik olarak veritabanı işlemleri yapmanızı sağlar. Code First mantığı ile veritabanını tamamen python üzerinde geliştirip otomatik olarak mysql tarafına aktarılmasını sağlayabilirsiniz. İlk önce MySQLdb modülü ile standart sql işlemleri yapmayı görelim ardından ORM kullanımına geçeceğiz. Şimdi yeni bir .py dosyası oluşturun.
MySQLdb Modülü
Kütüphaneyi uygulamanıza aşağıdaki gibi ekleyin
import MySQLdb
Connect metoduyla veritabanınıza bağlantıyı kurun
db = MySQLdb.connect("192.168.1.1","username","password","databasename" )
Python’da veritabanına komut göndermek ve sonuçları işlemek için bir Cursor nesnesi oluşturmanız gerekiyor
cursor = db.cursor()
Veritabanımıza ilk sorguyu gönderelim bunun için Execute metodunu kullanabilirsiniz
cursor.execute("SELECT * FROM wp_posts")
Sonuçları FetchAll metoduyla yakalayıp Enumarator olarak satır satır dönebilirsiniz
results = cursor.fetchall() for row in results: print row[5]
İşlemleriniz bittiğinde açık kalan bağlantıyı aşağıdaki gibi kapatmalısınız
db.close()
Tüm uygulama aşağıdaki gibidir
import MySQLdb db = MySQLdb.connect("192.168.1.1","username","password","databasename" ) cursor = db.cursor() cursor.execute("SELECT * FROM wp_posts") results = cursor.fetchall() for row in results: print row[5] db.close()
PonyORM Kullanımı
Bu şekilde basit düzeyde Mysql işlemleri yapabilirsiniz. Şimdi bu adresten PonyORM modülünü indirin. İndirdiğiniz klasör içerisinden “pony” klasörünü projenizin ana dizinine kopyalayın. Modülü uygulamanıza aşağıdaki gibi ekleyin
from pony.orm import *
Ardından veritabanı nesnesinin configürasyonunu aşağıdaki gibi yapalım.
db = Database() db.bind(provider='mysql', host='192.168.1.1', user='username', passwd='password', db='databasename')
Şimdi veritabanındaki tablonuzun python’daki karşılığı olan Model sınıfını oluşturalım
db = Database() class Wp_posts(db.Entity): post_title = Required(str) post_modified = Required(str)
Oluşturduğunuz Modelin PonyORM tarafından tanınması için aşağıdaki komutu yazın
db.generate_mapping(create_tables=True)
Şimdi Python sözdizimi ile sorgulama yapalım bunu .Net Framework’deki LINQ kütüphanesine benzetebilirsiniz.
posts = select(p for p in Wp_posts)[:]
Bu sorgunun SQL karşılığı aşağıdaki gibidir
SELECT * FROM wp_posts
Örnek sorgulama yöntemi aşağıdaki gibidir
with db_session: posts = select(p for p in Wp_posts)[:] for p in posts: print p.id, p.post_title, p.post_modified
Sonuçları formatlanmış şekilde görmek isterseniz Show metodunu kullanabilirsiniz. Örnek kullanım:
select(p for p in Wp_posts if p.id > 10)[:].show()
id|post_title|post_modified
–+————+——————-
6 |Shop |2014-10-10 01:21:08
7 |Cart |2014-10-10 01:21:08
SELECT Kullanımı
select(c for c in Wp_posts) -- SELECT `p`.`id`, `p`.`post_title`, `p`.`post_modified` FROM `wp_posts` `p`
WHERE Kullanımı
select(c for c in Wp_posts if c.id > 1) -- SELECT `p`.`id`, `p`.`post_title`, `p`.`post_modified` FROM `wp_posts` `p` WHERE `p`.`id` > 1
İki tabloyu birleştirmek
select(c for c in Wp_posts for a in c.wp_comments if a.comment_ID > 1000) -- SELECT DISTINCT `c`.`id`, `c`.`post_title`, `c`.`post_modified` FROM `wp_posts` `c`, `wp_comments_wp_posts` `t-1` WHERE `t-1`.`wp_comments` > 1000 AND `c`.`id` = `t-1`.`wp_posts`
devamı gelecek…
Mustafa Tayyip YETİŞ
Yazılım Geliştirme Uzmanı