#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()