我在Windows Access中有这个表:
我的表的标题是DATA
NAME - GENDER - NUMBER
如果 - 发现 - 1
阿里 - 男 - 2
MO - 男 - 3
我想使用一个输入,询问一个名字,我希望我的程序提供该人的详细信息。
我试着这样做:
import pyodbc
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};' +
r'DBQ=C:\Users\Gebruiker\PycharmProjects\TennisDatabase.accdb;')
gegevens = conn.cursor()
question = input("Give a name: ")
SelectString = 'SELECT NAME FROM DATA WHERE DATA.NAME = ' + question + ';'
gegevens.execute(SelectString)
gegevensList = gegevens.fetchall()
print(len(gegevensList), "Spelergegevens : ")
for gegevens in gegevensList:
print (gegevens)
print('')
我收到此错误:
回溯(最近一次调用最后一次):文件“C:/ Users / Gebruiker / PycharmProjects / Opdracht 1.py”,第9行,在gegevens.execute(SelectString)pyodbc.Error:('07002','[07002] [Microsoft ] [ODBC Microsoft Access驱动程序]参数太少。预期1.(-3010)(SQLExecDirectW)')
我不知道我做错了什么以及如何解决它。任何人都可以帮我怎么做?
打印出SelectString
,你会看到它看起来像
SELECT NAME FROM DATA WHERE DATA.NAME = Gord;
你的问题是Gord
不被认为是字符串文字;它被解释为列名。
您需要使用参数化查询,如下所示
sql = "SELECT [NAME] FROM [DATA] WHERE DATA.NAME = ?"
crsr.execute(sql, question)