Python ile Veritabanı İşlemleri

Berk Kayı
Deep Learning Türkiye
4 min readNov 4, 2020

Merhaba arkadaşlar bugün sizlerle python ile veritabanı işlemlerini inceleyeceğiz. Özellikle veritabanından python ortamına veri taşıma , python dan veritabanı ortamına veri taşıma ve python ortamında sql yazmak için çok kullanışlı bazı fonksiyonları inceleyeceğiz. Örnek olarak Postgresql veritabanı ile işlem yapıcam fakat oracle , mssql , mysql gibi popüler veritabanları için de aynı işlemleri yapabilirsiniz.

Öncelikle veri tabanına erişebilmek için bir connector oluşturmamız gerekir. Bu connector ü kullanarak veritabanında çok rahat bir şekilde sql yazabiliriz. Connector de olması gereken , ihtiyacımız olan bazı bilgiler var , bunlar :

  • database ürünü bilgisi(postgresql , oracle , vb)
  • database e hangi user ile bağlanıcağımızın bilgisi
  • user için şifre bilgisi
  • database in bulunduğu host ip bilgisi (localde çalışılıyorsa localhost veya 127.0.0.1)
  • database için kullanılan port numarası
  • database de bağlanılıcak veritabanı ismi

örnek olarak postgresql için connector bilgisi şöyle oluşturulabilir:

postgresql://user:password@host:port/database

Daha önceden sanal makinama kurduğum postgresql databaseine bağlanıcaz. Bizim kullanıcağımız connector ise default user ve default database ile aşağıdaki gibidir :

postgresql://postgres:berk123@192.168.1.102:5432/postgres

Veritabanımıza terminal ekranına bağlanmak için ssh bağlantısı kuruyoruz. Herhangi bir terminal ekranından yapabilirsiniz. Windowsta ise net-tools pakedini kurarak terminal ekranından ssh bağlantısı sağlayabilirsiniz.

Sanal makinamıza bağlandıktan sonra postgres userına geçiyoruz , ardından veritabanı işlemleri için psql komut satırına ulaşıyoruz, sırasıyla ;

  • \l veritabanlarını listeler
  • \dt+ veritabanındaki tabloları listeler
  • \c veritabanı değiştirmeye yarar
  • \q çıkış yapmaya yarar

Sık kullanılan bazı psql komutlarını gördük . Bağlantı kuracağımız ve çekeceğimiz customers tablosunun ilk 5 satırını da görüyoruz. Hadi şimdi python a geçelim :)

Connectorler için her veritabanının kendi kütüphanesi mevcut, örneğin orcale için cx_oracle , mssql için pyodbc vb kütüphaneler ile connector oluşturabilirsiniz. Ayrıca connector için 2 farklı yöntemden bahsedicem. Birincisi sqlAlchemy ile connector oluşturmak ,ikincisi (benim en çok sevdiğim) notebook ile çalışırken kullanabiliceğimiz ve bir magic command olan ipython-sql kullanacağız. Kurulumları aşağıdaki gibi yapabilirsiniz.

!pip install sqlalchemy
!pip install ipython-sql

sqlalchemy ile connector :

from sqlalchemy import create_engine
engine = create_engine("""
postgresql://postgres:berk123@192.168.1.102:5432/postgres
"""
connection = engine.connect()

magic command ile connector:

%load_ext sql%sql postgresql://postgres:berk123@192.168.1.102:5432/postgres

Veritabanlarına bağlandığımıza göre artık verimizi çekebiliriz. Customers tablosundaki verileri çekeceğiz.

Görüldüğü üzere pandas read_sql ile veya magic command ile çok rahat python ortamından sql yazabiliyoruz

read_sql ile kullanılan sorgu çıktısı pandas dataframe ile çağırılıyorken magic command için sql.run.result çıktısı veriyor. Bu çıktıyı dataframe olarak çok rahat kaydedebiliyoruz.

Evet verimizi çektik hertürlü işlemi yaptık ve veritabanına verisetini tekrardan eklemek istiyoruz ya da veritabanında yeni bir tablo oluşturmak istiyoruz. Normalde veritabanında tablo yaratılmamış ise içine veri atamayız, daha önceden tablonun oluşturulmuş olması gerekir (Bu kısmı en sona sakladım çünkü gerçekten çok güzel :) ). Pandas yine imdadımıza yetişiyor. to_sql fonksiyonu ile veritabanına tabloyu yazabiliyoruz. Ayrıca güzel kısmı veri tabanında tablo oluşturulmasa bile tabloyu oluşturuyor , ayrıca veri tiplerinide otomatik ayarlıyor.

Örneğin ülkelere göre bir barplot çizdiğimizi düşüenlim ve sonrasında bu çizdiğimiz dataları yeni bir tabloya yazmak istiyor olalım.

Grafiği yazdırdıktan sonra dataframe i veri tabanına connector ile gönderiyoruz. İndex False yaparak index diye yeni bir değişken oluşturmasının önüne geçiyor , if_exists ile öyle bir tablo var ise değiştirmesini söylüyoruz. Yeni tabloyu çağırdığımızda veritabanından grafik için kullanılan datayı görebiliyoruz.

Görüldüğü üzere yeni tablomuz veri tipi değiştirmeden ve veritabanında create table komutunu kullanmadan verilerle birlikte oluşturulmuş oldu.

Sonuç olarak eğer verileri temizliyicek , işliyicek veya kullanıcaksak read_sql ile veriyi çekmek daha efektif olacaktır. Eğer veri tabanıyla aktif çalışıyorsak ,python kodlarımız arasında çok pratik ve hızlı bir şekilde magic command ler kullanabiliriz.

Umarım faydalı olmuştur. Elimden geldiğince , bilgim yettiğince pratik bazı bilgiler aktarmak istedim. Yanlış bir bilgi veya eksik bir bilgi varsa , ayrıca sorularınız için de iletişime geçebilirisiniz. Herkese iyi çalışmalar dilerim.

--

--