错误:1210:执行prepared语句的参数数目不正确

bttbmeg0  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(346)

我正在尝试使用python将数据插入mysql。
这个错误的原因是什么?
编程错误:1210:执行prepared语句的参数数目不正确
我的python代码:

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()

我的table:

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
jaql4c8m

jaql4c8m1#

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()
qnyhuwrf

qnyhuwrf2#

您忘记传递executemany方法参数:

result  = cursor.executemany(sql_insert_query,records_to_insert)

mysqlcursor.executemany()方法语法:

cursor.executemany(operation, seq_of_params)

此方法准备一个数据库操作(查询或命令),并针对在参数的seq\中找到的所有参数序列或Map执行它。
此外,如果语法错误(删除引号),请改用以下命令:

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)
ncgqoxb0

ncgqoxb03#

使它工作的秘密是在单值元组的末尾加一个逗号。
例子:


# 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)**,**]

它适用于单值元组。
希望有帮助!

相关问题