модуль соединителя mysql python3 выдает исключение — ошибка значения: не удалось обработать параметры

#python #mysql

#python #mysql

Вопрос:

Я пытаюсь устранить эту ошибку, которая преследует меня. Я создал простой скрипт для заполнения базы данных с одним столбцом.

 import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  passwd="password",
  database="mydatabase"
) 
mycursor = mydb.cursor()

mycursor.execute("CREATE TABLE IF NOT EXISTS data(pass_word VARCHAR(20))")

val = 'test'
sql = "INSERT INTO data(pass_word) VALUES '%s'"
mycursor.execute(sql, (val))
mydb.commit() 
  

Это создает таблицу без проблем, поэтому я знаю, что соединитель работает. Но он отказывается вставлять значение val в pass_word.

Он выдает следующее исключение

 Press ENTER or type command to continue
Traceback (most recent call last):
  File "sql-try.py", line 19, in <module>
    mycursor.execute(sql, (val))
  File "/usr/local/lib/python3.6/dist-packages/mysql/connector/cursor_cext.py", line 248, in execute
    prepared = self._cnx.prepare_for_mysql(params)
  File "/usr/local/lib/python3.6/dist-packages/mysql/connector/connection_cext.py", line 538, in prepare_for_mysql
    raise ValueError("Could not process parameters")
ValueError: Could not process parameters
  

Комментарии:

1. вы пробовали mycursor.execute(sql, (val, )) ? если я правильно помню, вам нужно передать список / кортеж. без этой запятой (val) это просто строка…

2. Я изменил его, как вы предлагали, и теперь я получаю новую ошибку — _mysql_connector. Ошибка MySQLInterfaceError: у вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с «‘test»‘ в строке 1 — я также получаю эту ошибку сейчас — mysql.connector.errors. Ошибка программирования: 1064 (42000): у вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с «‘test»‘ в строке 1, который немного отличается…

3. @hiroprotagonist благодарю за помощь.

Ответ №1:

Я думаю, проблема заключалась в том, что в моей таблице был только один столбец, поэтому, когда я передавал значение val, само значение val должно было быть кортежем. Изменение его на (sql, (val,)) не решило проблему. Когда я создал таблицу с более чем одним столбцом, проблема исчезла.

 mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  passwd="password",
  database="mydatabase"
)
mycursor = mydb.cursor()
myname = 'jimmy'
password = 'grizwald'

mycursor.execute("CREATE TABLE IF NOT EXISTS data3(my_name VARCHAR(20), pass_word VARCHAR(20))")

val = (myname, password )
sql = "INSERT INTO data3(my_name, pass_word) VALUES (%s, %s)"
mycursor.execute(sql, val)
mydb.commit()