Merhaba bu yazımızda sizlerle python ile mysql veri tabanı bağlantı işlemlerini yapcağız. Mysql Oracle tarafından geliştirlen bir veri tabanıdır. Hali hazırda php,.net,java gibi bir çok programlama dilleri tarafındanda ücretsiz olarak kullanılmakatdır. Python ile mysql işlemleri yapabilmeniz için öncelikle mysql veri tabanınızın kurulu olması gerekmetedir. Bu işlem iki şekilde gerçeleştirilebilir. İster seni mysql.com adresinden indirebilirsiniz.
Mysql veritabanızı kurduğunuzu var sayarak şimdi python için mysql-connector’un kurulması gerekmektedir. Öncelikle siteminiz de python dosyasının kurulduğu dizini bulun ve python dizini içerisinde script dizinine giriniz benim bilgisayarımda aşağıdaki gibidir.
C:\Users\webMaster\AppData\Local\Programs\Python\Python39\Scripts
bu dizini bulduktan sonra konsola cmd yazın ve gelen siyah ekranda aşağıdaki kodu kendi sistem dizininize göre uyarlayıp çalıştırınız.
cd C:\Users\webMaster\AppData\Local\Programs\Python\Python39\Scripts
Daha sonra python mysql kurulumu için aşağıdaki pip install komudunu veriniz.
pip install mysql-connector-python
Hata metini almıyorsanız ve consolda sistem yüklemesi olmuşsa success olarak bir çıktı alacaksınız. Buraya kadar tam olarak ulaşmışsanız şimdi başlayabiliz.
.
Python MYSQL Veritabanı Bağlantısı
Öncelikle bağlantıyı kurabilmeniz için sayfa başında import msyql.connector
satırını ekleyerek mysql.connector modülünü çağıralım. Daha sonra aşağıdaki kodlama düzeninde sistem bilgilerini verelim.
1 2 3 4 |
mydb = my_sql.connector.connect( host = "localhost", user = "root", password = "") |
Eğer çalıştırdığınızda hata almıyorsanız problem yok demektir. Şimdi ise bir tane veri tabanı oluşturalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
mydb = my_sql.connector.connect(host = "localhost",user = "root",password = "") if mydb.is_connected(): #verit tabanı bağlantısını kontrol ettik print("baglı") cursor=mydb.cursor() cursor.execute("Create database pythondb") #pythondb adında bir veritabanı oluşturduk cursor.execute("show databases") #var olan veri tabanlarını listemek için sql komudumuzu girdir. for x in cursor: print(x) ## var olan veri tabanlarını döngüye sokarak ekrana girdik. #######ekran çıktı##################### # ('information_schema',) # ('mysql',) # ('performance_schema',) # ('phpmyadmin',) # ('pythondb',) # ('test',) |
Yukarıda yeni bir vertabanı oluşturduk ve mysql de bulunana ver tabanlarını listeledik. Şimdi ise istediğimiz bir vertabanına bağlanalım ve yeni bir tablo oluşturalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
dbbag=my_sql.connector.connect( host="localhost", user="root", password="", database="pythondb" ) #pythondb adında bir veritabanına bağlandık if dbbag.is_connected():#bağlatımızı kontrolünü yaptık print("Veri tabanına bağlandı") dbcursor=dbbag.cursor() dbcursor.execute(""" CREATE TABLE kullanicilar ( userid int(11) PRIMARY KEY AUTO_INCREMENT, username varchar(50) NOT NULL, userpassword varchar(32) NOT NULL, usermail varchar(150) NOT NULL, useractive int(1) DEFAULT 0 ); """) #Veri tabanımızda kullanicilar adında bir tablo oluşturduk dbcursor.execute("show tables") # Veri tabanımızda bulunan tabloları listesini aldık for i in dbcursor: #almış olduğumuz listeyi döngüye sokarak ekrana çıktısını aldık. print(i) |
Şimdi ise oluştuduğumuz veritabanına kullanıcılarımızı ekleyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#daha önceden oluşturduğumuz bağlantının üzerine dbcursor=dbbag.cursor() slq=""" insert into kullanicilar(userid,username,userpassword,usermail,useractive) values(null,%s,md5(%s),%s,%s) """ #sql kodumuzu hazırladık ve kullaıcılar tablosunu bir adet veri girişi yapacağız veri=("Çağlar Bostancı","123123123","info@caglarbostanci.com.tr",1) #burda ise sql injection saldırılarını önelmek için sql içerisinde %s ile bilirlediğmiz alanlara tumple bir veri oluşturduk. dbcursor.execute(slq,veri) #sql kodumuzu birinci parametre olarak verileri ise ikinci parametre olarak ekledik. dbbag.commit() # şimdi ise sql kodlarımız commit ettik bu komudu vermezseni sql veri girişi olmayacaktır. print(dbcursor.rowcount," adet kullanıcı girildi") #dbcursor.rowcount ile kaç satır veri girdiğimiz ekrana yazdırdık. ############EKRAN ÇIKTISI################### #Veri tabanına bağlandı # 1 adet kullanıcı girildi |
Tabi her zaman verilermizi tek tek girmeyeceğiz toplu olarakta veri girişleri yapmamız gerekebilir. Şimdi aşağıdaki örneğimizde ise birden çok veri girişini yapalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
##################Çoklu Veri Girişi##################### dbcursor=dbbag.cursor() sql=""" insert into kullanicilar values (null,%s,md5(%s),%s,%s) """ # sql kodumuz hazırladık ve verilen geleceği yerleri sql injection önelmi için %s ile belirledik. veri=[ ("Ahmet Taşçı","123","ahmet@gmail.com",1), ("Alp Demir","123","alp@gmail.com",0), ("Tarık Gemici","123","tarik@gmial.com",1), ("Meryem Yılmaz","123","meryem@gmail.com","") ] #burda ise birden çok veri girişi yapacağımız için bir liste hazırladık. Bu liste içersinde her kullanıcının verisini bir tuple haline getirdik. dbcursor.executemany(sql,veri) #sql kodumuz ve verilerimizi çalıştırmak için hazırladık. dbbag.commit() # sql veri girişini startını verdik if dbcursor.rowcount>0: # kaç adet veri girişi sağladımızı öğrendik ve bu sayı sıfırdan büyükse veri giriş yapıldığına dair mesaj verdik. print(dbcursor.rowcount,"Adet kullanıcı eklendi.") else: print("Kullanıcı girişi yapılamadı.") #aksi bir durumda veri girişi sağlanamazsa ekran çıktımızı hazırladık ##################Ekran Çıktısı############### #Veri tabanına bağlandı #4 Adet kullanıcı eklendi. |
Hadi şimdi hep beraber veritabanına girmiş olduğumuz verileri ekrana pasalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
###############VERİ OKUMA####################### dbcursor=dbbag.cursor() dbcursor.execute("select * from kullanicilar") #tablomuzdaki bütün verilerin gelmesini istedik gelenData=dbcursor.fetchall() if dbcursor.rowcount > 0: print(dbcursor.rowcount,"Adet veri var") for user in gelenData: print(user) ######################EKRAN ÇIKTISI############## # Veri tabanına bağlandı # 6 Adet veri var # (1, 'Çağlar', 'Bostancı', 'info@caglarbostanci.com.tr', 1) # (2, 'Çağlar Bostancı', 'f5bb0c8de146c67b44babbf4e6584cc0', 'info@caglarbostanci.com.tr', 1) # (3, 'Ahmet Taşçı', '202cb962ac59075b964b07152d234b70', 'ahmet@gmail.com', 1) # (4, 'Alp Demir', '202cb962ac59075b964b07152d234b70', 'alp@gmail.com', 0) # (5, 'Tarık Gemici', '202cb962ac59075b964b07152d234b70', 'tarik@gmial.com', 1) # (6, 'Meryem Yılmaz', '202cb962ac59075b964b07152d234b70', 'meryem@gmail.com', 0) |
Bütün kullanıcılarımızı listeledik aynı zamanda eğer istersek where şartı kullanara belirli şartlara görede kullanıcılarımızı listeleyebirlir.Pyton mysql veritabanı kullanımında belirli bir id deki kullanıcımızı listeleyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
dbcursor=dbbag.cursor() sql=""" select * from kullanicilar where userid=%s """ #userid 2 olan kullanıcımızı listelemek için sql sorgumuzu hazırladık. veri=(2,) dbcursor.execute(sql,veri) #sql injectionı önlemek için dışardıan gelen değerleri ikinci parametre olarak tuple olarak verdik. gelenData=dbcursor.fetchone() if dbcursor.rowcount > 0: print(dbcursor.rowcount,"Adet veri var") print(gelenData) #########################EKRAN ÇIKTISI################################## # Veri tabanına bağlandı # 1 Adet veri var # (2, 'Çağlar Bostancı', 'f5bb0c8de146c67b44babbf4e6584cc0', 'info@caglarbostanci.com.tr', 1) |
Tabi buraya kadar mysql genel sorgularını öğrenmiş olduk şimdi ise iki tablo verisini inner join ile birleştirerek ekrana basmayı öğrenelim. Inner join kullanımınızı ve diğer msyql sorguları bildiğinizi varsayarak devam ediyorum. Elimzde bulunan kullanıcılar tablosu ile bu kullanıcıların detay bilgilerinin bulunduğu “detay” tablosunu birleştirerek ekrana çıktı alalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
########################JOIN İŞLEMLERİ##################################### dbcursor=dbbag.cursor() sql=""" select * from kullanicilar inner join detay on kullanicilar.userid=detay.userid where kullanicilar.userid=%s """ #iki tabluyu birleştirdiğimiz sql sorgusunu hazırlardık. veri=(1,) #sadece bir tane kullanıcıyı çekeceğimiz içi ilgili where şartının parametresini ayarlardık. dbcursor.execute(sql,veri) dataveri=dbcursor.fetchone() #sadece bir adat veri alacağımız için fetchone kullandık. if dbcursor.rowcount>0: #gelen satırı sorguladık eğer 0 dan büyükse verinin geldiğini ön gördük print(dbcursor.rowcount,"adert veri bulundu") print(dataveri) #ekranımıza gelen veriyi bastık. # ###########################EKRAN ÇIKTISI##################################### # Veri tabanına bağlandı # 1 adert veri bulundu # (1, 'Çağlar', 'Bostancı', 'info@caglarbostanci.com.tr', 1, 1, 'ANKARA/YENİMAHALLE M.AKİF ERSON CAD. SİTE APT 34/4', '5439571508') |
Evet arkadaşlar bu yazımızda sizlerle python veritabanı işlemlerini inceledik. Bu öreneklemler sayesinde veritabanı işlemlerinizi artırabilirsiniz. Önerim procedure ve fonksiyon yazarak bunların kullanımını öğrenmenniz ve update delete örenekleri yapabilirisiniz. Başarılar dilerim.