SQLite Sütun İsmine Göre Veri Listeleme

Merhaba.

Veritabanından gelen verileri index numarasına göre değil de sütun ismine göre nasıl yazdırabiliriz?
Yani kitaplar[1] şeklinde değil de kitaplar[‘kitap_adi’] şeklinde veriye nasıl ulaşırız?

import sqlite3

baglanti = sqlite3.connect("Veriler.db")
kalem = baglanti.cursor()

kitaplar = kalem.execute("SELECT * FROM kitaplar")

for kitap in kitaplar.fetchall():
	# Şu anki yapı
    print("Kitap ID : ",kitap[0]," | Kitap Adı : ",kitap[1])
	
	# İstediğim yapı
    print("Kitap ID : ",kitap['kitap_id']," | Kitap Adı : ",kitap['kitap_adi'])

kitap_id ve kitap_adi nereden geliyor?

Bunlar veritabanındaki tabloda bulunan sütun isimleri.

resim_2021-12-06_214608

sqlite3 — DB-API 2.0 interface for SQLite databases — Python 3.10.0 documentation kullanarak olabilir ama neden boyle bir sey yapmak istiyorsun ki?

1 Beğeni

Çünkü indis numarasını akılda tutmak kolay olmuyor, veri kaçıncı sırada vs. Ayrıca bana göre kodun daha okunabilir olduğunu düşünüyorum.

SELECT’te belirtmiyo musun zaten?

Hmm, * kullaniyorsun galiba.

Neyse, yukaridaki row_factory veya soyle bir sey:

con = sqlite3.connect(':memory:')
with con:
   cur = con.execute('''SELECT 42 AS "id", 'foo' AS "name"''');
   assoc = [{cur.description[c][0]: d for c, d in enumerate(row)} for row in cur.fetchall()]
   print(assoc)
1 Beğeni

Teşekkür ederim.

Aşağıdaki şekilde de yapılabiliyormuş.
Ama sütun isimlerini yazarken büyük/küçük harf duyarlılığı yok anladığım kadarıyla.

import sqlite3

baglanti = sqlite3.connect("Veriler.db")
baglanti.row_factory = sqlite3.Row
kalem = baglanti.cursor()

kitaplar = kalem.execute("SELECT * FROM kitaplar")

for kitap in kitaplar.fetchall():
    print("Kitap ID : ",kitap['kitap_id']," | Kitap Adı : ",kitap['kitap_adi']])
1 Beğeni