Veritabanından Kullanıcı Giriş Bilgisi Çekme

Merhabalar,

2.sınıf öğrencisiyim ve Python’u yeni görüyorum.
Şu an tkinter gui ile program yapıyorum.
Program içinde Üye Ol kısmı oluşturup veritabanına bağladım ve oradaki yazdığım bilgiler veritabanına kaydoluyor.
Fakat Üye Girişi için bu bilgileri nasıl çekerim bunu bilmiyorum.
Veritabanı Mysql, xampp’dan.

Veritabanina gore degisir.

Mesela SQL ise SELECT query’si ile.

Mesajdan:

Sınır yemişim 7 saat bekle diyor. mysql, xamppden

SQL; SELECT query’si ile: mysql select at DuckDuckGo

Hocam olmuyor. Ben veritabanından nasıl giriş çekeceğim?

        mycursor=veritab.cursor()
        mycursor.execute("SELECT * FROM `musteriler` WHERE `mail`=%s AND `sifre`=%s ")
        mycursor.fetchone()
        ekran.destroy()
        import kullanici

Bu kodun başı belli değil sonu belli değil…

        mycursor.execute("SELECT * FROM `musteriler` WHERE `mail`=%s AND `sifre`=%s ")

Yukarıdaki kodlardaki tırnakları kaldırın.

`musteriler` -> musteriler olsun
`mail` -> mail olsun
%s -> ? olsun

SQL standardinda string’ler ' arasinda, tablo/kolon isimleri " arasinda. MySQL standarda uymuyordu diye hatirliyorum.

Query’i string olarak yollayacaksan WHERE kolon='string' gibi bir sey lazim. Parametrik olarak yollamak daha dogru, WHERE kolon=? ve parametre olarak string gibi bir sey.

Her halukarda kutuphanenin manueline bakman lazim. Modern database’ler konusunda fikir sahibi olabilmek icin MySQL hakkinda bildigim her seyi unutmam gerekti.

Hocam dediğini biraz anladım biraz anlamadım :smiley: Henüz mysql’de sorgulamalar görüyor, python’da yeni gui gördük. Bu işlerde yeniyim yani :smiley:

henüz sorunum da çözülmedi :frowning:

Bu sorun mu? :

Uye girisi icin bilgileri cekmek nedir?

Koddaki SELECT * FROM musteriler… satiri bunu yapiyor diye anladim cunku.

Şöyle. Benim ilk ekranım üye girişi. Bu üye girişine de 2 tane ekran bağladım. O da şu. Veritabanına bir müşteriler diye, bir de admin diye iki tablo oluşturdum.

Üye girişi ekranında, eğer admin mail ve şifre girerse import admin ile yaptığım admin paneli ekranı açılacak, eğer müşteri mail ve şifre ile girerse import kullanıcı ile yaptığım kullanıcı ekranı açılacak. Bu noktada, giriş tuşuna bastığımda mail ve şifre admine aitse admin, müşteriye aitse kullanıcı ekranı açılması için hangi mysql ve python kodunu yazmam gerekir? sorum detaylıca bu.

Şöyle bir Python kodu yazılabilir:

if girilen_bilgiler_admin_bilgileri_ile_uyusuyormu():
  import admin
else:
  import kullanıcı

Hocam zaten if else ile bu olaca bunu biliyorum. Sorun şu: 1. veritabanına bağlanıp, kullanıcı ve admin bilgilerini çektiği kod’da bir problem var. Benim yapmak istediğim şu: tanımlarla yazacağım siz orda kod varsayın.

if EgerBilgilerVeritabanındakiAdminTablosundakiAdminBilgileriyse:
import admin
elif EgerBilgilerVeritabanındakiMusterTablosundakiMusteriBilgileriyse:
import kullanici
else:
BuradaMesajBoxileMail/ŞifreHatalıMesajı

Benim de istediğim,

  1. if in çalışması için admin bilgisinin çekeceğim mysql kodu
  2. elif in çalışması için kullanıcı bilsigisinin çekileceği mysql kodu

Nasil bir problem var?

Bu arada hangi mysql kutuphanesini kullandigini da soylemen lazim.

mysql connector.
Olmuyor işte çalışmıyor. Kodu da yolladım

Normal, Tk import edilmemis:

Traceback (most recent call last):
  File "a.py", line 98, in <module>
    ekran=Tk()
NameError: name 'Tk' is not defined

Bi de typo var:

Traceback (most recent call last):
  File "a.py", line 102, in <module>
    ekran.resizable(FALSE,FALSE)
NameError: name 'FALSE' is not defined

Label, Entry, Button da import edilmemis.

Bunlari duzeltince MySQL kodunun calistigini goruyoruz:

  File "/usr/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
    return self.func(*args)
  File "a.py", line 42, in girisYap
    userlog = user_login(data)
  File "a.py", line 37, in user_login
    mycursor.execute("SELECT * FROM musteriler WHERE mail=? AND sifre=? ",tup)
  File "/tmp/mysql-connector-python-8.0.20/venv/lib/python3.7/site-packages/mysql/connector/cursor.py", line 561, in execute
    "Not all parameters were used in the SQL statement")
mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement

Calismayan kodu yollarsan bakabiliriz.

1 Beğeni

yapmam gereken sadece import tkinter as tk mı yapmak?

açıkcası ben vscode aldığınız hataları almadım, veritabanı bağlantısı da yaptım. konu kullanıcı ve admin tablosundan bilgi çekememek

Hangi hatalari aldiniz, veya hata almadiniz mi? Ilgincmis.

Sikinti kod calistigi halde* tablolardan bilgi cekememek ise:

Query yapan fonksiyona (execute) giden parametrelerin degerleri
Database’deki ilgili tablo(lar)in semalari ve datalari
Query yapan fonksiyonun dondurdugu sonuc/hata

Bilgilerine ihtiyacimiz var.

*: Kodun beklenmedik sekilde calismasi veya calisirken hata vermesi, calismamasindan farkli durumlar.

Şöyle söylim. Sadece “kullanıcı” girişi oluyor. Onu hallettim. Ama benim istediğim, aynı giriş ekranında, “admin” tablosundaki bilgilerle girilirse admin ekranı, “musteriler” tablosundaki bilgileri girince kullanıcı ekranının gelmesi. Sanırım olmayacak

Sizin ihtiyacınız olan tek şey bu query’ler mi?