Как мне обновить столбец в mysql с помощью списка python?

#python #mysql #mysql-connector

#python #mysql #mysql-connector

Вопрос:

Итак, я много искал вокруг. Я бы не задавал вопрос, если бы мне помог какой-либо из ответов на SO.

В принципе, у меня есть список python, с помощью которого я хочу обновить свой столбец mysql. Кажется, я не могу найти правильный запрос для него. Я использую библиотеку mysql.connector для подключения к базе данных.

fourth_query = 'UPDATE trendsincities SET trends = (%s) cursor.executemany(fourth_query, tuple(trends))

Где trends — это список, содержащий строки, разделенные запятыми.

В ответ на это я получаю сообщение об ошибке — Не все параметры были использованы в инструкции SQL

Нужна помощь в этом. Также было бы полезно связать это с решаемым вопросом. Спасибо

Ответ №1:

Является trendsincities VARCHAR полем, и вы пытаетесь сохранить в нем строку, разделенную запятыми? Если это так, то вы бы хотели что-то вроде этого:

 trends = ["best", "city", "new"]
trends_as_csv_string = ",".join(trends)
sql = "UPDATE trendsincities SET trends=%s"
cursor.execute(sql, trends_as_csv_string)
  

Однако я немного подозрительно отношусь к этому. Я думаю, вы, вероятно, хотите узнать, INSERT если это новый товар? Или, если это UPDATE , вы, вероятно, захотите использовать WHERE предложение, такое как:

 "UPDATE trendsincities SET trends='best,city,new' WHERE city='New York'"
  

В противном случае каждое последующее обновление будет перезаписывать предыдущее.

Но если вы хотите вставить каждый тренд, вы бы использовали этот шаблон:

 trends = ["best", "city", "new"]
for trend in trends:
    cursor.execute('INSERT INTO trendsincities (trend) VALUES (%s)', trend)
  

И затем в конце ваших инструкций sql вы захотите выдать a, connection.commit() в зависимости от того, были autocommit вы включены или нет.

Надеюсь, один из вышеупомянутых подходов поможет.

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

1. Спасибо, Дэвид. Итак, выполнение приведенного выше возвращает ValueError: не удалось обработать параметры. Столбец trends имеет тип данных TEXT. Он содержит тенденции городов. Каждая тенденция разделяется пробелом. Что я хочу сделать, так это извлечь данные столбца, настроить их и отправить обратно в базу данных.

2. @DeveshDatwani можете ли вы, пожалуйста, обновить свой вопрос со схемой тогда?

3. Привет, итак, я исправил это, зациклив инструкцию insert для каждого элемента в списке трендов с предложением WHERE (связывая их с их городами в том же порядке). Я пытался придумать способ не делать этого, но я не мог найти решение для этого. Большое спасибо за то, что были терпеливы и добры. Ваше здоровье.

Ответ №2:

То, что работает для меня, было:

 row = 0
for i in range(0, len(values)):
        row  =1
        val = values[i]
        sql = f"UPDATE teste SET percent = {val} WHERE id = {row}"
        cursor.execute(sql)
        connection.commit()
  

Obs: Я использую mysql.connector для установления соединения с MySQL.