2017-11-08 16 views
-1

tkinterウィンドウへのエントリをsqlite3テーブルのデータと比較する方法は不思議です。私はテーブルから読むことができますが、「エントリー」と比較すると、エントリーが見つかったかのように決して出てこません。tkinterエントリからsqlite3テーブルへの名前の比較

def __init__(self, master): 
self.frame = Frame(master) 
self.frame.pack() 
self.firstname = StringVar() 
self.surname = StringVar() 

def find(self): 
    x = c.execute('SELECT surname FROM MemberRecordsTable') 
    if self.surname.get() == x: 
     found = Label(self.frame, text = 'Name found') 
     found.pack() 
    else: 
     notfound = Label(self.frame, text = 'Name not found') 
     notfound.pack() 

def checkpayments(self): 
    checkmember = Entry(self.frame, textvariable = self.surname) 
    checkmember.pack() 
    checkmember2 = Entry(self.frame, textvariable = self.firstname) 
    checkmember2.pack() 
    findmember = Button(self.frame, text = 'Find member', command = self.find) 
    findmember.pack() 
+0

あなたは何のデバッグをしましたか? 'x'を印刷して、それがあなたが想定しているものかどうか確認しましたか? –

答えて

1

は、sqlite3.Cursorオブジェクトを返します。そのカーソルを使用して実際の照会結果を取得する必要があります。最初の結果を得るにはcursor.fetchone()でそれを行うことができます。しかし

、あなたはこのように問い合わせることができる姓の欄にself.surnameの値を含むデータベース内のすべての行があるかどうかを確認したいので、:

c.execute('SELECT surname FROM MemberRecordsTable where surname = ?', (self.surname.get(),)) 
if c.fetchone(): 
    print('Found') 
else: 
    print('Not found') 

このクエリが持つデータベースから行を返しますが、 surname列の値はself.surnameです。クエリは、任意のユーザ入力データを受け入れるときに存在するSQLインジェクション攻撃を軽減するためにパラメータ化を使用して実行されます。

関連する問題