Python ve Sqlalchemy kullanarak yaptığım login ekranında hata

merhaba sqlalchemy kullanarak komut satırı üstünde bir login ekranı yapmak istiyorum ancak yaptığım for döngüsü okunmuyor kullanıcı adı şifre girince ekrana hoşgeldiniz veya bilgileriniz yanlış yazmıyor
db.py dosyamın içindeki veritabanı bağlantı ve tablo oluşturma kodları böyle

from sqlalchemy import create_engine,ForeignKey, MetaData, Table, Column,Integer,String
engine = create_engine('sqlite:///kullanici1.db',echo = True)
meta = MetaData()

user = Table(
    'users', meta,
    Column('k_adi',String,primary_key=True),
    Column('sifre',String),
    Column('ad',String)
)
meta.create_all(engine)

kullanıcı adı şifre sorgulattığım ve kayıt eklediğim dosyamda ise kodlar şu şekilde

from db import user,engine
eklenecek_kullanici=user.insert().values(k_adi ="deneme",sifre = "deneme123",ad = "deneme denemeoglu") #insert komutu
baglanti = engine.connect()
baglanti.execute(eklenecek_kullanici)

gosterilen_ogrenci = user.select()
sonuc = baglanti.execute(gosterilen_ogrenci)
sonuc_liste = sonuc.all()

kadi = str(input("kullanici adını giriniz: "))
sifr = str(input("sifre giriniz: "))
for row in sonuc_liste:
    if kadi == row.k_adi and sifr == row.sifre:
        print("Hoşgeldin",row.k_adi)
    else:
        print("bilgilerinizden biri yanlış")

umarım saçma kodlar yazmamışımdır daha yeniyim :frowning:
şimdiden vaktini ayıran herkese teşekkür ederim

evet… veri tabanını yanlış bağlamışım ondan bir işlem yapmıyormuş şimdi düzeldi ama başka bir sorunum var for ile yazdığım için doğru kayıdı bulana kadar ekrana bilgileriniz yanlış yazıyor doğrusunu bulunca hoşgeldn yazıyor bunu nasıl engellerim

from db import user,engine
eklenecek_kullanici=user.insert().values(k_adi ="deneme",sifre = "deneme123",ad = "deneme denemeoglu") #insert komutu
baglanti = engine.connect()
baglanti.execute(eklenecek_kullanici)

gosterilen_ogrenci = user.select()
sonuc = baglanti.execute(gosterilen_ogrenci)
sonuc_liste = sonuc.all()

kadi = str(input("kullanici adını giriniz: "))
sifr = str(input("sifre giriniz: "))
login= False
for row in sonuc_liste:
    if kadi == row.k_adi and sifr == row.sifre:
        login=True
    else:
        login=False
if login==True:
    print("Giriş başarılı")
else:
    print("Giriş başarısız")

Bu şekilde sorununuzu çözebilirsiniz. Ben de yeniyim kodlamada bu yüzden daha kısa ve verimli bir çözümü de olabilir.

1 Beğeni

bu sefer de sadece veritabanındaki en son kayıta giriş başarılı diyor diğerlerine başarısız diyor
:frowning:

Buradaki else, denenen her row için çalışma potansiyeline sahip. Aslında oradaki else’in tüm row’lar tarandıktan ve herhangi bir eşleşme bulunamadıktan sonra çalışması gerekiyor. Bunu, else’i bir girinti düzeyi geri alarak yapabiliriz :d

for row in sonuc_liste:
    if kadi == row.k_adi and sifr == row.sifre:
        print("Hoşgeldin", row.k_adi)
        break
else:
    print("bilgilerinizden biri yanlış")

else şu an for’a ait oldu (ayrıntılar için 1 ve 2); kısa olarak, bu else, eğer döngünün gidişatı “kırılmadıysa”, yani herhangi bir break aksiyon almadıysa çalışıyor. Dikkat ederseniz döngüde if’in altına bir break ekledik; bu sayede kayıt eşleşir eşleşmez döngüden çıkılacaktır ve else de çalışmaz. Ama hiçbir kayıt eşleşmez ise, break de çalışmayacaktır, ve for’dan sonra gelen else’in altındaki, yani “bilgilerinizden biri yanlış” kısmı çalışacaktır.

teşekkür ederim elseyi bir girinti geri almayı denemiştim ama sanırım break koymadığım için çalışmamıştı :smiley: