我正在运行Python3.5和Psycopg2 2.6,它们在tkinter窗口中工作。 我有一个名为backend.py的文件,其中包含以下功能:
import psycopg2
def search(year=0, month=0):
'''Search the database for entries.'''
conn = psycopg2.connect("dbname='birth_years'")
cur = conn.cursor()
cur.execute("SELECT * FROM birthdays WHERE year=year OR month=month;")
row = cur.fetchone()
conn.close()
return row
我有一个名为frontend.py的文件,其中包含以下代码。
from tkinter import *
import backend
def search_command(year, month):
'''Run queries on the database.'''
listbox1.delete(0, END)
row = backend.search(year_text.get(), month_text.get())
listbox1.insert(END, row)
window = Tk()
window.wm_title("Birthdays")
window.resizable(width=False, height=False)
Grid.rowconfigure(window, 0, weight=1)
Grid.columnconfigure(window, 0, weight=1)
b1 = Button(window, text="Search", width=15, command=search_command)
b1.grid(row=2, column=5)
window.mainloop()
数据库:
id year month
1 1999 2
2 2005 5
3 1987 11
4 1988 12
5 1978 10
该数据库包含此数据。PGAdmin2 可以成功运行查询并仅选择我想要的行。当我使用 all 函数查询 1988 年的数据时,只会在数据库的第一行得到结果。
1 1999 2
row = cur.fetchone()
而不是fetchall()
,所以会出现这种情况。您明确要求它只返回一个值。 - roganjosh