Как использовать вход в Python с SQL - PullRequest
0 голосов
/ 22 марта 2019

У меня есть эта таблица в Windows Access:

Название моей таблицы - ДАННЫЕ

ИМЯ - ГЕНДЕР - НОМЕР

Джо - Мужской - 1

Али - мужчина - 2

МО - мужской - 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('')

Я получаю эту ошибку:

Traceback (последний вызов был последним): Файл "C: / Users / Gebruiker / PycharmProjects / Opdracht 1.py", строка 9, в gegevens.execute (SelectString) pyodbc.Error: ('07002', '[07002] [Microsoft] [ODBC Microsoft Access Driver] Слишком мало параметров. Ожидается 1. (-3010) (SQLExecDirectW)')

Понятия не имею, что я делаю неправильно и как это исправить. Может кто-нибудь помочь мне, как это сделать?

1 Ответ

1 голос
/ 22 марта 2019

Распечатайте SelectString, и вы увидите, что это выглядит как

SELECT NAME FROM DATA WHERE DATA.NAME = Gord;

Ваша проблема в том, что Gord не распознается как строковый литерал; оно интерпретируется как имя столбца.

Вам необходимо использовать параметризованный запрос , например,

sql = "SELECT [NAME] FROM [DATA] WHERE DATA.NAME = ?"
crsr.execute(sql, question)
...