Python İle PonyORM Kullanımı ve MySQL İşlemleri

  • 25.07.2017
  • M.Tayyip Yetiş
  • Python

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ı

Yorum Yap

Diğer Makaleler

Etiketler