Как обновить определенные ячейки в mysql?

160
24 марта 2018, 14:18

Есть таблица в mysql, в ней первая колонка 'auto-increment'. Следующая - ссылка на youtube канал. Последующие - информация по youtube каналу. Необходимо, чтоб код дописывал значения переменных из python в mysql в ту же строку, а не создавал каждый раз новую. Вот пример моего кода:

database = mysql.connector.connect(user=settings.db_login, password=settings.db_password,
                                               host=settings.dp_ip, database=settings.db_name, use_unicode=True,
                                               charset='utf8', collation='utf8_general_ci')
cursor = database.cursor()
cursor.execute("""INSERT INTO youtube_videos (channel_ID, channel_name, channel_description, channel_startDate,
               channel_daysFromFoundation, channel_avatarImg, channel_region, channel_viewCount,
               channel_subscribersCount, channel_videoCount) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""",
               (channel_id, channel_title, channel_description, channel_startDate, channel_daysFromFoundation, channel_avatarImg,
                channel_region, channel_viewCount, channel_subscribersCount, channel_videoCount))

Нужно, что код не создавал каждый раз новую строку, а изменял значения в столбцах текущей

Код при замене INSERT INTO на UPDATE

Traceback (most recent call last):
  File "D:/perforce/Social/test.py", line 87, in <module>
    channel_region, channel_viewCount, channel_subscribersCount, channel_videoCount))
  File "D:\Minicanoda3\lib\site-packages\mysql\connector\cursor.py", line 515, in execute
    self._handle_result(self._connection.cmd_query(stmt))
  File "D:\Minicanoda3\lib\site-packages\mysql\connector\connection.py", line 488, in cmd_query
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
  File "D:\Minicanoda3\lib\site-packages\mysql\connector\connection.py", line 395, in _handle_result
    raise errors.get_exception(packet)
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 '(channel_ID, channel_name, channel_description, channel_startDate,
             ' at line 1

Добавил WHERE, но похоже, ошибка в синтаксисе

database = mysql.connector.connect(user=settings.db_login, password=settings.db_password,
                                               host=settings.dp_ip, database=settings.db_name, use_unicode=True,
                                               charset='utf8', collation='utf8_general_ci')
cursor = database.cursor()
cursor.execute("""SELECT ID, channel_link FROM youtube_videos""")
ID = cursor.fetchall()[0]
cursor.execute("""UPDATE youtube_videos SET channel_ID = 'channel_id' WHERE ID FROM youtube_videos = %s""", ID)

Что-то опять не так исправил:

channel_id = 'UCVmcXaPBCHjVZWb82UK7AHw'
cursor.execute("""SELECT ID FROM youtube_videos WHERE channel_id is NULL""")
ID = cursor.fetchall()
ID = ID[0][0]
cursor.execute('UPDATE youtube_videos SET channel_ID = %s WHERE ID = %s ' % (channel_id,  ID))

Вот TraceBack:

mysql.connector.errors.ProgrammingError: 1054 (42S22): Unknown column 'UCVmcXaPBCHjVZWb82UK7AHw' in 'field list'
Answer 1

У вас проблема в том что вы хотите вставить несколько аргументов в обновление потому что когда вы вызываете (из вашего кода)

d = cursor.execute("""SELECT ID, channel_link FROM youtube_videos""")

Вы присваиваете 2 переменный которые хранятся в ячейках ID и channel_link( т.е. если вы выведите d то скорее всего у вас будет что то вроде
"Пример":(2, то что храниться в ячейке channel_link))

Как пример обновление (мой пример) можете использовать примерно такую конструкцию. Тут вы вводите тот ID на который хотите поменять и меняете его на тот который был раньше

import pymysql
conn = pymysql.connect(
                host=host,
                port=3306,
                user=user,
                password=password,
                db="test_create",
                charset='utf8',
                autocommit=True)
cur = conn.cursor()
number = input('Введите на какой заменить ID\n')
cur.execute("SELECT ID, real_name_test FROM Twiss")
c = cur.fetchall()[0]
print('Было {}'.format(c))
cur.execute("UPDATE Twiss SET ID = '%s' WHERE ID = %s " % (number,  c[0]))
cur.execute("SELECT ID, real_name_test FROM Twiss")
print('Стало {}'.format(cur.fetchall()[0]))

Вывод:

> Введите на какой заменить ID
> 6
Было (12, '5')
Стало (6, '5')
READ ALSO
sql запросы на добавление товара в WooCommerce

sql запросы на добавление товара в WooCommerce

Народ привет!Подскажите какие sql запросы использует WooCommerce для полного добавления одного товара(с картинкой)Или есть ли способ отследить...

186
Как работает Update в EFCore? [требует правки]

Как работает Update в EFCore? [требует правки]

Пытаюсь обновить значение в строке таблицы тремя разными способами, но по итогу ничего не меняется

183
Patience Sort реализация C#

Patience Sort реализация C#

Пытаюсь разобраться с алгоритмом терпеливой сортировки, вроде даже как разобрался с принципом работы алгоритма, но в некоторых случаях элементы...

285