【发布时间】:2018-07-08 16:02:24
【问题描述】:
我在 tkinter 窗口中运行 Python3.5 和 Psycopg2 2.6。 我在一个名为 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
postgresql 数据库包含这些数据。 PGAdmin2 能够很好地运行查询并只选择我想要的行。当我使用函数运行 1988 年的查询时,我在数据库的第一行中得到所有信息。
1 1999 2
【问题讨论】:
-
呃,是的,因为您使用的是
row = cur.fetchone()而不是fetchall()。你明确要求它只返回一个值。 -
尽管问题还有其他问题,因为您显然查询 1988 并返回 1999 的结果?这是一个错字还是一个真正的问题?
-
无论我使用 cur.fetchone() 还是 cur.fetchall(),我都会得到相同的结果。它只获取数据库的第一行。没有错别字,如果我搜索 2005,我会得到 1999。这没有意义。
-
cur.fetchall() 只是获取整个数据库。
标签: python database postgresql psycopg2