2014-06-09 1 views
-1

도와주세요. 약간의 GUI 사전을 만들고 데이터베이스에 인터페이스를 연결하려고합니다. 데이터 (단어 및 정의)를 데이터베이스에 올바르게 입력 할 수는 있지만 데이터베이스의 단어를 조회 할 수 없어 GUI의 출력 상자에 적절한 정의가 표시됩니다.변수를 사용하는 SQL 쿼리의 결과를 가져올 수 있습니까?

모듈 1 (메인 프로그램) :

from tkinter import * 
import libraryentrySQL 
import sqlite3 
import os 



def click(): 
    entered_text = entry.get() #collect text from text entry box 
    output.delete(0.0,END) #clears text box - start clearing from 0.0 (from line 0) to END (after last character) 
    new_db = sqlite3.connect('dictionary.db') 
    c=new_db.cursor() 
    try: 
     definition = c.execute("SELECT definition FROM Dictionary WHERE word=%s", (entered_text)) 
    except: 
     definition = "No word found in dictionary, try again!" 
    output.insert(END, definition) #this inserts the contents of variable 'definition' at the beginning (END) - because it was cleared before, END is the at the start 

def clickentry(): #this function is run when the 2nd button (entry is pressed) 
    def definition_submitted(word, definition): 
     new_db = sqlite3.connect('dictionary.db') 
     c=new_db.cursor() 
     c.execute("INSERT INTO Dictionary VALUES (?, ?)", (word, definition)) 
     new_db.commit() 
     new_db.close() 

    definition_window = libraryentrySQL.DefinitionWindow(window, definition_submitted) #this creates the object 'definition window' and passes to it 'the window variable' 
                         #so that it can have a canvas 
                         #and also passes the function 'definition_submitted' so that as the new word and definition are entered 
                         #in the this object (second window) it can be passed into the function and the dictionary updated 

window = Tk() 

window.title("My Little Dictionary") 

#Create the Label 
Label(window, text="Enter the word you want defining:").grid(row=0, column=0, sticky=W) 

#create entry box 
entry=Entry(window, width=20, bg="light green") 
entry.grid(row=1, column=0, sticky=W) 

#create submit button 
Button(window, text="Submit", width=5, command=click).grid(row=2, column=0, sticky=W) 

#create second label 
Label(window, text="\nDefinition").grid(row=3, column=0, sticky=W) 

#create text box 
output=Text(window, width=75, height=6, wrap=WORD, background="light green") 
output.grid(row=4, column=0, sticky=W) 

#create submit button to open enter new definition window 
Button(window, text="Enter a New Definition", width=20, command=clickentry).grid(row=5, column=0, sticky=W) 


#Create the Dictionary.db if not already present 
if not os.path.isfile("dictionary.db"): 
    new_db = sqlite3.connect('dictionary.db') 
    c=new_db.cursor() 

    c.execute('''CREATE TABLE Dictionary 
    (word text, 
    definition text)''') 

    c.execute('''INSERT INTO Dictionary VALUES 
    ('Algorithm', 'Step by step instructions to complete a task')''') 

    new_db.commit() 
    new_db.close() 

window.mainloop() 

모듈 2 (워드 및 정의 창을 입력) : 내가 잘못

from tkinter import * 

class DefinitionWindow(Toplevel): 
    def __init__(self, root, click_callback): 
     Toplevel.__init__(self, root) 
     self.click_callback = click_callback 
     self.title("Library entry") 

     #Create the Label 
     Label(self, text="Enter the word you want to add:").grid(row=0, column=0, sticky=W) 

     #create entry box 
     self.word_entry=Entry(self, width=20, bg="light green") 
     self.word_entry.grid(row=1, column=0, sticky=W) 

     #create second label 
     Label(self, text="\nDefinition").grid(row=2, column=0, sticky=W) 

     #create entry box 
     self.definition_entry = Entry(self, width=50, bg="light green") 
     self.definition_entry.grid(row=3, column=0, sticky=W) 

     #create submit button 
     Button(self, text="Submit", width=5, command=self.clicked).grid(row=4, column=0, sticky=W) 

    def clicked(self): 
     self.click_callback(self.word_entry.get(), self.definition_entry.get()) #when this function is called (on submit button click) it takes the entered 
                       #word and definition and assigns it to click_callback, which is an attribute of DefinitionWindow?? 
     self.destroy() #after the word and definition are added to the call_back variable, the frame containing this instance of definition window is closed 

을 뭐하는 거지? "SELECT"SQL 명령이 올바르지 않다는 것을 알고 있습니다. 어떤 도움이라도 감사하게 받아 들여질 것입니다. 감사합니다

+0

, 왜이 질문이 아래로 표시되었다 :

마지막으로, 하나의 값으로 파이썬 튜플은 하나의 표현과 구분하기 위해 쉼표를 포함해야? – sw123456

답변

1

이것은 파이썬에서 SQL 쿼리가 작동하는 방식이 아닙니다.

execute 메서드는 값이 아니라 커서를 반환합니다. 아무 것도 발견되지 않으면 예외가 발생하지 않고 커서가 단지 비어 있습니다.

except 블록에서 모든 예외를 블라인드 처리하면 프로그래밍 오류가 숨겨집니다.

또한 매개 변수 표식은 %s이 아니라 ?이 아닙니다.

물어 수
c = new_db.cursor() 
c.execute("SELECT definition FROM Dictionary WHERE word = ?", (entered_text,)) 
for row in c: 
    definition = row[0] 
    break 
else: 
    definition = "No word found in dictionary, try again!" 
output.insert(END, definition) 
+0

감사합니다. 큰 도움이되었습니다. – sw123456

관련 문제