# # Python MSSQL Veritabanı

Python ile veritabanı işlemleri programlamada önemli bir konuma sahiptir. Bu dersimizde verileri veritabanında saklamak ve yeri geldiğinde kullanmak için Python MSSQL bağlantısını ve SELECT, INSERT, UPDATE, DELETE işlemlerini nasıl yapacağız öğreneceğiz.

Daha önceki dersimizde Python Mysql Veritabanı bağlantısını görmüştük, bu dersimizde de Python MSSQL veritabanı bağlantısı dersi ile Python programlama konusunda önemli bir konuyu daha işlemiş bulunacağız.

## 1. `pypyodbc` Kütüphanesinin Kurulması ve Projeye Dahil Etme <a href="#id-1-pypyodbc-k-t-phanesinin-kurulmas-ve-projeye-dahil-etme" id="id-1-pypyodbc-k-t-phanesinin-kurulmas-ve-projeye-dahil-etme"></a>

MSSQL ile veritabanı işlemlerimizi rahatça yapabilmemiz için `pypyodbc` kütüphanemizi kurmamız gerekiyor. Bunun için aşağıdaki komutu kullanarak pip ile kütüphanemizi indirelim:

```
pip install pypyodbc
```

Artık kütüphanemizi kurduğumuza göre projemize kütüphaneyi dahil edebiliriz. Bunu yapabilmek için sayfamızın en üstüne aşağıdaki kodu ekleyelim:

```
import pypyodbc
```

Kütüphaneyi indirip projemize dahil ettikten sonra artık örneklerimize başlayabiliriz.

## 2. MySQL Veritabanı Bağlantısı <a href="#id-2-mysql-veritaban-ba-lant-s" id="id-2-mysql-veritaban-ba-lant-s"></a>

Artık veritabanımıza bağlantımızı yapacak bilgileri oluşturmanın zamanı geldi. Bunun için öncelikle hangi yöntemle veritabanına bağlanacağımızı seçmeliyiz. Nu iki yöntemi de sırasıyla görelim:

### 2.1 Windows Authentication İle Bağlantı <a href="#id-2-1-windows-authentication-i-le-ba-lant" id="id-2-1-windows-authentication-i-le-ba-lant"></a>

![](/files/-Lx6aON3FZ6VdCmVAWQ0)

Server bağlantısını Windows yetkilendirmesiyle kullanıyorsanız aşağıdaki kodu kullanmalısınız.

```
db = pypyodbc.connect(
    'Driver={SQL Server};'
    'Server=serveradi;'
    'Database=veritabaniadi;'
    'Trusted_Connection=True;'
)
```

### 2.2 SQL Server Authentication İle Bağlantı <a href="#id-2-2-sql-server-authentication-i-le-ba-lant" id="id-2-2-sql-server-authentication-i-le-ba-lant"></a>

![](/files/-Lx6aWV-lXIL0M44Qjd9)

Server bağlantısını kullanıcı adı ve şifre ile kullanıyorsanız aşağıdaki kodu kullanmalısınız.

```
db = pypyodbc.connect(
    'Driver={SQL Server};'
    'Server=serveradi;'
    'Database=veritabaniadi;'
    'UID=kullaniciadi;'
    'PWD=parola;'
)
```

## 3. İmleç Oluşturma <a href="#id-3-i-mle-olu-turma" id="id-3-i-mle-olu-turma"></a>

Veritabanı bağlantısı ile komutlarımızı gönderebilmek için aracı bir imleç oluşturmamız gerekiyor. İmleç oluşturmak için aşağıdaki kodları kullanabilirsiniz.

```
imlec = db.cursor()
```

## 4. SQL İşlemleri <a href="#id-4-select-i-lemi" id="id-4-select-i-lemi"></a>

Bağlantımızı ve imlecimizi oluşturduktan sonra temel işlemlerimizi yapmaya başlayabiliriz.

### 4.1 SELECT İşlemi

En çok kullanılan komut olan SELECT ile başlayalım. Bunun için ilk önce veritabanımızda örnek bir tablo oluşturalım. Ben kullanicilar isimli tabloyu oluşturmak ve basit olması için sadece id, ad, soyad, yas sütunlarını kullanmak istiyorum. İlk başta örnek olarak 2-3 tane veride ekleyebilirsiniz:

![](/files/-Lx6aZn8xVc7O4S3QNuo)

Tablomuz ve örnek verilerimiz hazırsa sorgu kodumuzu hemen gönderelim:

```
imlec.execute('SELECT * FROM Kisiler')
```

Bu isteğin ardından dönen sonuçları (dizi olarak döner) bir değişkene aktarmamız gerekiyor. Bunun içinde aşağıdaki gibi bir eşitleme yapıyoruz:

```
kullanicilar = imlec.fetchall()
```

Artık tablomuzdaki kullanıcılarımızı bir değişkene atadık ve sıra ekrana yazdırmaya geldi. Bunun için foreach döngümüzü kullanarak dönen diziyi ekrana yazdırıyoruz:

```
for i in kullanicilar:
    print(i)
```

Ekran çıktımız şu şekilde olacaktır:

![](/files/-Lx6ahCtS8SFY0DfdOKc)

Eğer dönen sonuçları daha detaylı kullanmak istiyorsanız sütun isimlerini kullanarak ekrana yazdırabilirsiniz. Bunun için:

```
for i in kullanicilar:
    print("isim: " + i['ad'] + " " + i['soyad']  + " --- " + "Yaş: " + str(i['yas']) )
```

Ekran çıktımız şu şekilde olacaktır:

![](/files/-Lx6aje9FC3kiL_wR-vn)

!! Tek bir satır çekmek için **`fetchall()`** yerine **`fetchone()`** fonksiyonunu kullanabilirsiniz.

Özet olarak execute fonksiyonu ile hangi komutu gönderirseniz dönen sonuçlar komutun çıktısı olacaktır. Sizlerde istediğiniz komutları yukarıdaki örnekteki gibi gönderebilirsiniz.

### 4.2 INSERT İşlemi

Tablomuza yeni bir kullanıcı eklemek istediğimizde kullanmamız gereken kod yapısı aşağıdaki gibidir:

```
komut = 'INSERT INTO Kisiler VALUES(?,?,?)'
veriler = ('Özlem','ÖZ',25)

sonuc = imlec.execute(komut,veriler)
db.commit()
```

Tablonuza baktığınızda kullanıcınızı eklenmiş göreceksiniz.

![](/files/-Lx6appaQ-UTFvwt3IkJ)

Yukarıdaki kodda **?** ile göndereceğimiz değerleri belli ediyoruz. Tablomuzda ad,soyad ve yas sütunları olduğu için **?** ile belirlediğimiz değişkenleri bir sonraki parametrede yazarak gönderiyoruz `(id sütununu identity ve auto increment bir değer ayarladığım için kendi komutumda id değeri göndermeye gerek yok)`. Yani insert işleminin kabaca syntax yapısı şu şekildedir:

imlec.execute = **(SQL Komutu,Değişkenler)**

En önemli kısmına gelirsek te **db.commit()** ile yaptığımız değişiklikleri veritabanına ileterek insert işlemini gerçekleştiriyoruz. Eğer **`commit()`** işlemini yapmazsanız insert işlemleriniz gerçekleşmez!

### 4.3 UPDATE İşlemi

Şimdi geldik tablomuzdaki mevcut bir değeri güncellemeye. Bu işlem için `UPDATE` komutunu kullanacağız. Aşağıdaki örneği hemen incelemeye başlayabilirsiniz:

```
sonuc = imlec.execute('UPDATE Kisiler SET yas = ? WHERE id = ?',(50,1))
db.commit()

print(str(sonuc) + " kullanıcı güncellendi")
```

Bu işlemin sonucunda ekran çıktılarımız şu şekilde olacaktır:

![](/files/-Lx6ave7B96MJ1607OwP)

Gördüğünüz gibi klasik `Update` komutumuzu gönderdik ve işin kritik noktası olan **commit()** ile işlemlerimizi başarıyla tamamladık. Artık sıradaki işlemimize geçebiliriz.

### 4.4 DELETE İşlemi

Tablomuzdan bir değer silmek istersek `DELETE` komutunu kullanabiliriz. Hemen örneğimizi görelim.

```
sonuc = baglanti.execute('DELETE FROM Kisiler WHERE id = ?',(7,))
db.commit()

print(str(sonuc) + " kullanıcı silindi")
```

Tablomuza baktığımızda kullanıcının silinmiş olduğunu göreceksiniz

## 5. SONUÇ <a href="#id-7-sonu" id="id-7-sonu"></a>

Bu yazımızda Python ile MSSQL veritabanı bağlantısını ve temel işlemleri nasıl yapabileceğimizi öğrendik. Bunu yaparken de işin temelinin SQL komutlarımızı sorunsuz bir şekilde hazırlayıp **execute()** fonksiyonuyla bağlantısını tamamladığımız veritabanımıza göndermek olduğunu gördünüz. Sizde daha gelişmiş işlerinizde yukarıdaki örnekleri baz alabilir, takıldığınız yerleri aşağıya yorum bırakarak sorabilirsiniz.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://derslik.kerteriz.net/python-dersleri/veritabani-islemleri/python-mssql-veritabani.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
