from tkinter import *
import tkinter as tk
import pyodbc
root1 = tk.Tk()
label1 = tk.Label(root1, text='product A')
input1 = StringVar()
entry1 = tk.Entry(root1,textvariable=input1)
label1.pack(side = tk.TOP)
entry1.pack()
buttonstr = tk.StringVar()
db = r"C:\Users\Goutham\Documents\keshav\testdb.accdb"
def odbc():
'''
connects with odbc
'''
constr = 'Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=' + db
conn = pyodbc.connect(constr, autocommit=True)
cur = conn.cursor()
check=input1.get()
strsql = "select * from student where SName=%s"%(check)
cur.execute(strsql)
results = cur.fetchall()
print (results,check)
conn.close()
buttonA = tk.Button(text = "hello", command = odbc)
buttonA.pack()
我需要此代码来获取输入,将其存储在变量-'check中,并使用SQL查询将其与数据库中的值进行比较。然后显示数据库中的匹配值。
SQL查询的实现似乎存在问题。“check”存储输入的值。 SQL查询无法正常工作并导致错误。
请帮忙。
谢谢。
答案 0 :(得分:2)
您需要将参数单引用到WHERE子句:
strsql = "select * from student where SName='%s'" % (check,)
但要注意构建这样的子句(使用字符串格式化),就会冒着SQL注入的风险。你应该传递参数:
strsql = "select * from student where SName=?"
cur.execute(strsql, (check,))