import pandas as pd
import pyodbc
from statsbombpy import sb
Giriş
Veri yönetimi ve analizi, günümüz dünyasının temel taşlarından biri haline gelmiştir. Bu yazıda, Python kullanarak SQL Server’da temel işlemleri gerçekleştirmeyi öğreneceğiz.
Kullanılacak Kütüphaneler
Veritabanı İşlemleri
Veritabanının Oluşturulması
FDATA
adlı veritabanını oluşturalım.
= 'SQL Server'
DRIVER_NAME = 'DESKTOP-1RNVH0O\\SQLEXPRESS'
SERVER_NAME = 'master'
DATABASE_NAME
= f"""
conn_str DRIVER={{{DRIVER_NAME}}};
SERVER={SERVER_NAME};
DATABASE={DATABASE_NAME};
Trust_Connection=yes;
"""
= pyodbc.connect(conn_str)
conn = conn.cursor()
cursor
= 'FDATA'
new_database_name
= f"CREATE DATABASE {new_database_name}"
create_db_sql
= True
conn.autocommit
cursor.execute(create_db_sql)
print(f"Database '{new_database_name}' successfully created.")
DRIVER_NAME
SQL Server veritabanı sürücüsünün adı, SERVER_NAME
SQL Server’ın kurulu olduğu bilgisayarın adı ve sürücü bilgisi ve DATABASE_NAME
başlangıçta bağlanılacak veritabanının adıdır. Burada master
SQL Server’ın varsayılan veritabanıdır.
conn_str
SQL Server veritabanına nasıl bağlanılacağını belirten bir dizedir.
Trust_Connection=yes
güvenli bağlantı kullanımını sağlar.
pyodbc.connect(conn_str)
bağlantı dizesini kullanarak veritabanına bağlanır. conn.cursor()
SQL komutlarını çalıştırmak için bir cursor
(gösterici) oluşturur.
new_database_name
oluşturulacak yeni veritabanının adıdır.
create_db_sql
yeni veritabanını oluşturmak için kullanılır.
conn.autocommit = True
SQL komutlarının otomatik olarak işlem görmesini sağlar. Yani, komut çalıştırıldığında değişiklik hemen uygulanır.
cursor.execute(create_db_sql)
veritabanını oluşturmak için SQL komutunu çalıştırır.
Son olarak, veritabanının başarıyla oluşturulduğunu belirten bir mesaj yazdırılır.
Veritabanında Tablonun Oluşturulması
EURO2024
adlı tabloyu oluşturalım.
= 'FDATA'
DATABASE_NAME
= f"""
conn_str DRIVER={{{DRIVER_NAME}}};
SERVER={SERVER_NAME};
DATABASE={DATABASE_NAME};
Trust_Connection=yes;
"""
= pyodbc.connect(conn_str)
conn = conn.cursor()
cursor
= 'EURO2024'
new_table_name
= f"""
create_table_sql CREATE TABLE {new_table_name} (
match_id INT,
match_date VARCHAR(8),
kick_off VARCHAR(6),
home_team VARCHAR(255),
away_team VARCHAR(255),
home_score INT,
away_score INT
)
"""
= True
conn.autocommit
cursor.execute(create_table_sql)
print(f"Table {new_table_name} successfully created.")
FDATA
veritabanına bağlanılıyor.
new_table_name
oluşturulacak yeni tablonun adıdır.
match_id INT
maçın ID’sini tamsayı, match_date VARCHAR(8)
maçın tarihini metin, kick_off VARCHAR(6)
maçın başlama saatini metin, home_team VARCHAR(255)
ev sahibi takımın adını metin, away_team VARCHAR(255)
deplasman takımının adını metin, home_score INT
ev sahibi takımın skorunu tamsayı ve away_score INT
deplasman takımının skorunu tamsayı olarak saklar.
conn.autocommit = True
SQL komutlarının otomatik olarak işlem görmesini sağlar, yani tablo oluşturulduğunda değişiklik hemen uygulanır.
cursor.execute(create_table_sql)
veritabanında tabloyu oluşturur.
Son olarak, tablonun başarıyla oluşturulduğunu belirten bir mesaj yazdırılır.
Veritabanına Gönderilecek Verilerin Çekilmesi
= sb.matches(competition_id=55, season_id=282)
matches 'match_id'] = matches['match_id'].astype(int)
matches['match_date'] = pd.to_datetime(matches['match_date']).dt.strftime('%Y%m%d')
matches['kick_off'] = pd.to_datetime(matches['kick_off']).dt.strftime('%H%M%S') matches[
Verilerin Veritabanına Gönderilmesi
= """
insert_sql INSERT INTO EURO2024 (
match_id,
match_date,
kick_off,
home_team,
away_team,
home_score,
away_score
) VALUES (?, ?, ?, ?, ?, ?, ?)
"""
for _, match in matches.iterrows():
cursor.execute(insert_sql, ('match_id'],
match['match_date'],
match['kick_off'],
match['home_team'],
match['away_team'],
match['home_score'],
match['away_score']
match[
))
print(f"Matches data successfully inserted into {new_table_name} table.")
conn.close()
INSERT INTO EURO2024
, EURO2024
tablosuna veri eklemek için kullanılır.
VALUES (?, ?, ?, ?, ?, ?, ?)
, tabloya eklenecek verilerin yerlerini temsil eder. Burada ? işaretleri, verilerin yerleştirileceği yerleri belirtir.
for
döngüsü ile veriler tabloya yerleştirilir.
conn.close()
veritabanı ile olan aktif bağlantıyı kapatır ve bağlantı kaynağını serbest bırakır.
Son olarak, verilerin tabloya başarıyla yerleştirildiğini belirten bir mesaj yazdırılır.
Aşağıda veritabanındaki verilerin bir bölümü gösterilmiştir.
Veritabanından Verilerin Çekilmesi
= "SELECT * FROM EURO2024"
query = pd.read_sql(query, conn) df
conn.autocommit = True
ile ilgili son bir açıklama yapalım.
conn.autocommit = True
durumunda her SQL komutu kendi başına bir işlem olarak değerlendirilir ve otomatik olarak veritabanına kaydedilir. Yani, commit()
veya rollback()
çağırılmasına gerek kalmaz. Bu durum genellikle veri tabanını yapılandırırken, yeni bir veritabanı veya tablo oluştururken kullanılır.
Gelecek içeriklerde görüşmek dileğiyle.