Ошибка: 1210: неверное количество аргументов, выполняющих подготовленный оператор - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь вставить данные в MySQL, используя Python.

В чем причина этой ошибки?

ProgrammingError: 1210: неверное количество выполняемых аргументов подготовленное заявление

Мои коды питона:

connection = mysql.connector.connect(host='localhost',
                         database='popsww2017',
                         user='root',
                         password='')
records_to_insert = [('---2q7vcZGU', 'Partner-provided', '35', '9s1Pvm0U8Gg8mRavZhVXdg', 'A663893851990558', '1066/2016/HDHT-Pops-Kha Ly', '1467', '0.100598')]
sql_insert_query = "INSERT INTO raw_music (`Video_ID`, `Content_Type`, `Video_Duration`, `Channel_ID`, `Asset_ID`, `Asset_Labels`, `Owned_Views`, `Partner_Revenue`) VALUES ( '%s', '%s' , '%s' , '%s', '%s' , '%s' , '%s' , '%s') "
cursor = connection.cursor(prepared=True)
result  = cursor.executemany(sql_insert_query,records_to_insert)
connection.commit()

Мои таблицы:

Video_ID    varchar(50) utf8_unicode_ci     
Content_Type    varchar(100)    utf16_unicode_ci        
Video_Duration  int(11)         
Channel_ID  varchar(100)    utf8_unicode_ci     
Asset_ID    varchar(50) utf32_unicode_ci        
Asset_Labels    varchar(400)    utf32_unicode_ci        
Owned_Views int(20)         
Partner_Revenue float   

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

executemany функция используется, когда вам нужно вставить много строк в базу данных. И второй параметр должен быть списком, содержащим значения, которые будут вставлены в эти разные строки. Так что либо вы модифицируете код следующим образом: (Обратите внимание, что я добавил квадратные скобки [] к records_to_insert, составив список)

records_to_insert = [('---2q7vcZGU', 'Partner-provided', 35, '9s1Pvm0U8Gg8mRavZhVXdg', 'A663893851990558', '1066/2016/HDHT-Pops-Kha Ly', 1467, 0.100598)]
sql_insert_query = "INSERT INTO raw_music (`Video_ID`, `Content_Type`, `Video_Duration`, `Channel_ID`, `Asset_ID`, `Asset_Labels`, `Owned_Views`, `Partner_Revenue`) VALUES ( '%s', '%s' , %d , '%s', '%s' , '%s' , %d , %f) "
cursor = connection.cursor(prepared=True)
result  = cursor.executemany(sql_insert_query, records_to_insert)
connection.commit()
0 голосов
/ 13 мая 2019

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

Пример:

# a tuple
to_insert = ('A value to insert'**,**)

В этом случае:

records_to_insert = [('---2q7vcZGU', 'Partner-provided', 35, '9s1Pvm0U8Gg8mRavZhVXdg', 'A663893851990558', '1066/2016/HDHT-Pops-Kha Ly', 1467, 0.100598)**,**]

Работает для однозначных кортежей.

Надеюсь, это поможет!

0 голосов
/ 07 ноября 2018

Вы забыли передать параметры метода executemany :

result  = cursor.executemany(sql_insert_query,records_to_insert)

Метод MySQLCursor.executemany () Синтаксис:

cursor.executemany(operation, seq_of_params)

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

Также ваш синтаксис неправильный (удаляйте кавычки), используйте вместо него следующее:

records_to_insert = [('---2q7vcZGU', 'Partner-provided', '35', '9s1Pvm0U8Gg8mRavZhVXdg', 'A663893851990558', '1066/2016/HDHT-Pops-Kha Ly', '1467', '0.100598')]
sql_insert_query = "INSERT INTO raw_music (`Video_ID`, `Content_Type`, `Video_Duration`, `Channel_ID`, `Asset_ID`, `Asset_Labels`, `Owned_Views`, `Partner_Revenue`) VALUES ( %s, %s , %s , %s, %s , %s , %s , %s) "
cursor = connection.cursor(prepared=True)
result  = cursor.executemany(sql_insert_query, records_to_insert)
...