# # Python PostgreSQL Veritabanı

&#x20;**PostgreSQL**; güçlü, açık kaynak kodlu, nesne ilişkisel ve tüm işletim sistemlerinde çalışabilen gelişmiş bir veritabanı sistemidir. SQL diliyle birlikte kullanılan PostgreSQL’in verileri güvenli bir şekilde saklama, karmaşık verileri ölçeklendirme, hız, performans gibi bir çok özelliği ve avantajı vardır. PostgreSQL hakkında daha detaylı bilgileri araştırma yaparak öğrenebilirsiniz. Bu yazımızda ise Python ile PostgreSQL kullanımını anlatmaya odaklanacağız.

## 1. `Psycopg2` Kütüphanesinin Kurulması ve Projeye Dahil Etme

Python ve PostgreSQL veritabanı bağlantısı işlemini yapabilmek için birçok modül mevcuttur. Biz bunların arasında daha yaygın bir kullanıma sahip olan `Psycopg2` kütüphanesini kullanacağız. Maddelere dökersek ise `Psycopg2` kütüphanesi kullanmamızın sebepleri arasında başlıca şunlar vardır;

* Psycopg2, PostgreSQL için en popüler python modülüdür.
* Birçok Python ve Postgres frameworku ile hali hazırda kullanılan kütüphanedir.
* Python 3 ve Python 2 sürümleri ile sorunsuz çalışır

Özet bilgilerden sonra ilk işimiz `Psycopg2` modülünü kurmak olsun.

```python
pip install psycopg2
```

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

```python
import psycopg2
```

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

## 2. PostgreSQL Veritabanı Bağlantısı

Artık veritabanımıza bağlantımızı yapacak bilgileri oluşturmanın zamanı geldi. Bunun için aşağıdaki kod blogunu ekleyerek kullanıcı adı, şifre ve veritabanı adını kendinize göre düzenlemelisiniz:

```python
db = psycopg2.connect(user = "kullanici_adi",
                      password = "sifre",
                      host = "localhost",
                      port = "5432",
                      database = "veritabani_adi")
```

## 3. İmleç Oluşturma

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.

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

Buraya kadar olan işlemlerin doğruluğunu test etmek için aşağıdaki komut ile bağlantı bilgilerimizi ekrana yazdıralım.

```python
print( db.get_dsn_parameters() )
```

Ekran çıktımız aşağıdaki gibi olmalıdır.

![](/files/-M3bXI0Zk0KELCGoA3rM)

Python ile PostgreSQL veritabanı bağlantısını başarıyla yaptıktan sonra artık işlemlerimize geçebiliriz.

## 4. CREATE İle Tablo Oluşturma İşlemi

Temel işlemlerden başladığımıza göre ilk olarak üzerinde çalışabileceğimiz basit bir tablo oluşturalım ve bu tablonun adını `isimler` olarak belirleyelim. Tablomuzun yapısı ve bu tabloyu oluşturacak `CREATE` komutu şu şekilde olacaktır.

| SÜTUN ADI | TİP     | ÖZELLİKLER                  |
| --------- | ------- | --------------------------- |
| id        | integer | Primary Key, Auto Increment |
| ad        | text    | Not NULL                    |
| soyad     | text    | Not NULL                    |

```python
komut_CREATE = """ CREATE TABLE isimler(
                id SERIAL PRIMARY KEY,
                ad TEXT NOT NULL,
                soyad TEXT NOT NULL
                );
                """

imlec.execute(komut_CREATE)
db.commit()
```

Burada SQL komutumuzu yazdıktan sonra `execute()` fonksiyonu ile çalıştırıyoruz ve değişikliklerin veritabanı üzerinde de yapılması için `commit()` fonksiyonu ile işlemi tamamlıyoruz.

![](/files/-M3bXThJ-5Z_1SVqZFmG)

Tablomuz hazır, temel işlemlere başlayabiliriz.

## 5. INSERT İle Tabloya Veri Ekleme İşlemi

Oluşturduğumuz `isimler` tablosuna diğer başlıklarda kullanmak üzere birkaç örnek veri ekleyelim. Bunun için `INSERT` komutunu kullanıyoruz.

```python
komut_INSERT = "INSERT INTO isimler(ad,soyad) VALUES('Fatih','TÜRK');"

imlec.execute(komut_INSERT)
db.commit()
```

Bu şekilde birkaç satır ekleyelim ve tablomuzu kontrol edelim.

![](/files/-M3bX_VOD_w-D70-hU9C)

## 6. SELECT İle Tablodan Verileri Alma İşlemi

En çok kullanılan komut olan `SELECT` ile devam edelim. Bunun için örnek olarak oluşturduğumuz `isimler` tablosunu çekerek ekrana yazdıralım:

```python
komut_SELECT = "SELECT * FROM isimler;"
imlec.execute(komut_SELECT)

liste = imlec.fetchall()
for i in liste:
    print(i)
```

Bu komut ile ekran çıktımız şu şekilde olacaktır.

![](/files/-M3bXh71-6Txp1PbRM-V)

`fetchall()` fonksiyonu ile `execute()` fonksiyonu sayesinde işlediğimiz SQL komutunun çıktısını bir diziye atmış olduk. Bu diziyi de for döngüsü ile ekrana yazdırdık. Dönen dizide sütun isimlerine göre yazdırma işlemi yapmak istiyorsak ta aşağıdaki komutu kullanabiliriz.

```python
komut_SELECT = "SELECT * FROM isimler;"
imlec.execute(komut_SELECT)

liste = imlec.fetchall()
for i in liste:
    print("ID:",i[0]," | ","AD:",i[1]," | ","SOYAD:",i[2]," | ")
```

Ekran çıktımız ise şu şekilde olacaktır.

![](/files/-M3bXnOOgzK1bu-nSIzc)

**NOT:** Sorgu sonucunda tüm satırları çekmek için `fetchall()`, tüm satırlar yerine tek satır almak istiyorsanız `fetchone()`, belirli sayıda satır çekmek istiyorsanız da `fetchmany(SIZE)` fonksiyonunu kullanabilirsiniz.

## 7. UPDATE İle Veri Güncelleme İş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:

```python
komut_UPDATE = "UPDATE isimler SET ad='Abdullah' WHERE id=1;"

imlec.execute(komut_UPDATE)

db.commit()
```

`id` sütun değeri 1 olan hücrede ki "Furkan" değerini "Abdullah" ile değiştirdiğimiz komut sonucu tablomuz şu şekilde olacaktır.

![](/files/-M3bXwrdiK5dgmIykHBz)

## 8. DELETE İle Veri Silme İşlemi

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

```python
komut_DELETE = "DELETE FROM isimler WHERE id=2;"

imlec.execute(komut_DELETE)

db.commit()
```

Ardından tablomuzun yeni hali şu şekilde olacaktır.

![](/files/-M3bY1ldKw4ojgc6Ywn7)

## 9. SONUÇ

Bu yazımızda Python ile PostreSQL 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 ve ardından işlemlerin veritabanı kısmında da gerçekleşmesi için `commit()` ettiğimizi 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-postgresql-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.
