Как вызвать строковое значение в SQL-запрос в Python - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь вызвать строковое значение из контейнера tn (входные данные, предоставленные пользователем) для завершения SQL-запроса

# lists is a list in which all table names in the database is stored
ct=0
while ct!=2:
    print("1.Enter the table name you want access")
    print("2.Exit")
    ct=int(input("Enter your choice (1 or 2) :"))
    if ct==1:
        tn=input("Enter table name :")
        break
    elif ct==2:
        sys.exit(0)
    else:
        print("INVALID INPUT")
if tn in lists:
    print()
    print("Table found!")
    mycursor.execute("SELECT * FROM (%s)",(tn,))
for i in mycursor:
    print(i) 

Я хочу, чтобы SQL-запрос завершился, он выполнил и показал мне результаты обратно(то есть должна отображаться таблица, которую пользователь ввел)

я получаю это сообщение об ошибке при запуске кода: -

Traceback (most recent call last):
  File "C:\Users\11c1.System2-PC\Desktop\MYSQL\Mysql (Software).py", line 59, in <module>
    mycursor.execute("SELECT * FROM (%s)",(tn,))
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\mysql\connector\cursor.py", line 551, in execute
    self._handle_result(self._connection.cmd_query(stmt))
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\mysql\connector\connection.py", line 490, in cmd_query
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\mysql\connector\connection.py", line 395, in _handle_result
    raise errors.get_exception(packet)
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''11c')' at line 1

, предполагая, что '11c' является вводом, даннымпользователь и таблица с именем 11c действительно существуют в базе данных

Когда я пробовал один и тот же код с ?, например: -

ct=0
while ct!=2:
    print("1.Enter the table name you want access")
    print("2.Exit")
    ct=int(input("Enter your choice (1 or 2) :"))
    if ct==1:
        tn=input("Enter table name :")
        break
    elif ct==2:
        sys.exit(0)
    else:
        print("INVALID INPUT")
if tn in lists:
    print()
    print("Table found!")
    mycursor.execute("SELECT * FROM (?)",(tn,))
for i in mycursor:
    print(i)

, это выдает ошибку как: -

Traceback (most recent call last):
  File "C:\Users\11c1.System2-PC\Desktop\MYSQL\Mysql (Software).py", line 59, in <module>
    mycursor.execute("SELECT * FROM (?)",(tn,))
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\mysql\connector\cursor.py", line 543, in execute
    "Not all parameters were used in the SQL statement")
mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement

1 Ответ

0 голосов
/ 25 сентября 2019

Попробуйте следующий синтаксис запроса:

query= "SELECT * FROM %s"
mycursor.execute(query%(tn,))

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...