mysql - 执行准备好的语句的参数数量不正确 - Python/MySQL

标签 mysql python-2.7

当执行以下代码以通过变量从 python 插入多个值到 mysql 时,我得到:

'Incorrect number of arguments executing prepared statement ' error after executing 'result = cursor.executemany(sql_insert_query, records_to_insert)'



如果我删除“准备=真”,错误变成:

'Not all parameters were used in the SQL statement'


import mysql.connector
connection = mysql.connector.connect(host='localhost',
                         database='majorprediction',
                         user='root',
                         password='')
records_to_insert = [ ('x') ,
                     ('y'),
                     ('z') ]
sql_insert_query = """ INSERT INTO majorpred (Major) 
                   VALUES (%s) """
cursor = connection.cursor(prepared=True)
result  = cursor.executemany(sql_insert_query, records_to_insert)
connection.commit()

任何人都可以指定问题出在哪里?

最佳答案

您正在传递字符列表而不是元组。例如,如果您尝试运行:

for record in records_to_insert:
    print(record, isinstance(record, str), isinstance(record, tuple))

你会得到:
x True False
y True False
z True False

要在 python 中使用单个元素创建元组,您可以执行以下操作:

records_to_insert = [
    ('x',),
    ('y',),
    ('z',) 
]

如果您有一个参数列表并希望将它们全部转换为元组,您可以执行以下操作:

list_of_elements = list("list_of_characters")
tuples = [
    tuple(e) for e in list_of_elements
]

希望这可以帮助!

关于mysql - 执行准备好的语句的参数数量不正确 - Python/MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53116394/

相关文章:

mysql - mysql中如何将两个大表合并为一个

mysql - 如何计算 MySQL 中某一列的某些元素?

python - 如何为方法创建装饰器

python - 如何将文件从我的目录上传到 SharePoint

python - 覆盆子PI B +上的python 2.7 cvtColor错误215

mysql - 用于填充 Type-3 SCD 的算法是什么?

php - MySQL 将两个 SELECT 查询合并为一个检查重复值

python - 在 python 2.7 中扩展类,使用 super()

mysql - 根据列值添加列数据?

python - 在按长度排序的列表中查找相同值的子序列的索引