1 min read

Python 3 MySQL Kullanımı

Python 2 versiyonunda MySQL sunucusuna bağlantı kurmak için default olarak modül mevcut ancak Python 3 sürümünde böyle bir modül mevcut değil. Bu nedenle MySQL sunucusuna bağlantı kurabilmek için bir modüle ihtiyacımız var. İnternette MySQL bağlantısı kurabilmek için bir çok modül mevcut ancak ben sizlere kullanımı kolay ve geliştirilmeye devam edilen bir modülden bahsetmek istiyorum.

PyMySQL adında ki modülümüz ile MySQL sunucumuza sorunsuzca bağlantı kurup sorgularımızı encoding problemi olmadan gerçekleştirmemiz mümkün. Kütüphanenin kaynak kodlarını incelemek isteyenler için github adresi: https://github.com/PyMySQL/PyMySQL

Modülü pip yada manuel olarak kurabilirsiniz, pip ile kurmak için konsola;

sudo pip3 install PyMySQL

komutunu vermemiz yeterli. Kullandığınız Python sürümü 3.4 ise sisteminizde pip3.4 kurulu olmalı ve bu işlemi pip3.4 ile gerçekleştirmeniz gerekecektir.

Manuel kurulum için ise bu adresi takip etmeniz yeterli yinede kurulum için gerekli kodları sizlerle paylaşım.

$ # X.X yerine kurmak istenen sürümü numarasını girin (0.5 yada 0.6).
$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
$ cd PyMySQL*
$ python3 setup.py install

Kurulum başarılı bir şekilde gerçekleştikten sonra hemen örnek bir bağlantı kuralım;

#!/usr/bin/env python3

import pymysql

baglanti = pymysql.connect(host = '127.0.0.1', unix_socket = '/var/run/mysqld/mysqld.sock', user = 'root', passwd = '123456', db = 'databaseadi')
baglanti = baglanti.cursor()
  •  host: Bağlantı kurulacak MySQL server’ın hostu.
  • unix_scoket: MySQL socket’inin yolu. Debian dağıtımlarında /var/run/mysqld/mysqld.sock olarak tanımlıdır.
  • user: MySQL kullanıcı adı.
  • passwd: MySQL kullanıcısının şifresi.
  • db: Bağlantı kurulacak database adı.

Örnek bir sorgu verelim;

#!/usr/bin/env python3

import pymysql

baglanti = pymysql.connect(host = '127.0.0.1', unix_socket = '/var/run/mysqld/mysqld.sock', user = 'root', passwd = '123456', db = 'mysql')
baglanti = baglanti.cursor()

# Tüm tabloları listeleyen sorguyu gönderdik.
baglanti.execute('SHOW TABLES')

# Sorgu sonucunda gelen tüm satırları aldık.
tablolar = baglanti.fetchall()

for i in tablolar:
    print(i)

Çıktımız ise;

('columns_priv',)
('db',)
('event',)
('func',)
('general_log',)
('help_category',)
('help_keyword',)
('help_relation',)
('help_topic',)
('host',)
('ndb_binlog_index',)
('plugin',)
('proc',)
('procs_priv',)
('proxies_priv',)
('servers',)
('slow_log',)
('tables_priv',)
('time_zone',)
('time_zone_leap_second',)
('time_zone_name',)
('time_zone_transition',)
('time_zone_transition_type',)
('user',)

Process finished with exit code 0