Как я могу использовать переменные Python с помощью команды UPDATE в MySQL?

#python #mysql #mysql-connector

Вопрос:

Я пытался сделать эту часть своего проекта уровня А, в котором у меня есть база данных в MyPHPAdmin, и мой код захватывает значение, сравнивает его с заданным значением и, если оно не изменилось, использует это местоположение в базе данных для хранения нового значения. (Я не могу просто вставить новые данные из-за других частей моего кода). Я пытался использовать переменную со значением, сохраненным в ней из поля ввода, однако она отказывается принимать значение. Я перепробовал много вещей, и мне кажется, что я не могу заставить это работать, и, кажется, я получаю разные ошибки каждый раз, когда пытаюсь что-то другое. Я боюсь, что это может быть просто что-то простое, чего мне не хватает, но, хоть убей, я не могу этого понять, и это сводит меня с ума. (Также да, я просмотрел документацию, но она не очень полезна для моей ситуации)

Мой Код:

 mycursor = database.cursor(buffered=True)
mycursor.execute("SELECT name FROM creationPokemon")
myresult = mycursor.fetchone()[0]
print(myresult)

if myresult == "Placeholder1":
    sql = ("UPDATE creationPokemon SET name = %s WHERE name = %s")
    val = ('Placeholder1', cName)
else:
    myresult = mycursor.fetchone()[0]
    print(myresult)

mycursor.execute(sql)
database.commit()
 

Ошибка, на которую я наткнулся на этот раз, заключается в следующем:

 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 '%s WHERE name = %s' at line 1
 

Мы очень ценим любую помощь.

Ответ №1:

при использовании кортежей python и mysql connector требуется не менее 2 имен, и вам нужно заполнить оба заполнителя

 mycursor = database.cursor(buffered=True)
mycursor.execute("SELECT name FROM creationPokemon")
myresult = mycursor.fetchone()[0]
print(myresult)

if myresult == "Placeholder1":
    sql = "UPDATE creationPokemon SET name = %s WHERE name = %s"
    val = (cName,cName)

    mycursor.execute(sql,val)
    database.commit()
else:
    myresult = mycursor.fetchone()[0]
    print(myresult)
 

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

1. Привет, спасибо за ответ, но это все равно показывает ту же ошибку.

2. я изменил строки soem, так как они имеют больше смысла в этом отношении, я все еще не знаю, откуда берется Cname. Кроме того, ваш запрос на обновление будет иметь смысл только в том случае, если вы выберете только одного покемона или хотите заменить все заполнители, поэтому вам нужен цикл

3. большое спасибо, мне удалось заставить его работать с помощью этого, избавив меня от сильной головной боли