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ış")
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
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.