#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.